Вопрос

Я, как и у многих других разработчиков PHP, были проблемы с кодированием персонажей, вопрос обрисован в общих чертах шагов, которые я выполняю, чтобы убедиться, что мои данные сохраняются и выведены в качестве UTF8. Я хотел бы любые советы о том, что еще я должен рассмотреть и или измениться с моим текущим мышлением.

У меня есть база данных MySQL DEFAULT CHARACTER UTF-8 Мои таблицы сопоставлены utf8_general_ci

Я использую скрипт PHP для чтения данных из RSS -канала, а затем сохраняю эти данные по базе данных. Прежде чем сохранить эти данные, я проверю, чтобы увидеть, являются ли эти данные UTF-8 или нет, выполнив следующее:

protected function _convertToUTF8($content) {
    $enc = mb_detect_encoding($content);
    return mb_convert_encoding($content, "UTF-8", $enc);
}

При выводе этих данных на веб -страницу я устанавливаю заголовки в PHP

header("Content-type: text/html; charset=utf-8");

И я также установил метатет типа контента, чтобы быть UTF-8

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

До сих пор все работает, как и ожидалось, я не получаю смешных символов, выводящих, и все идет гладко, но я должен менять/рассматривать что -то еще при работе с этими данными?

Проблема, которую я сейчас испытываю, заключается в том, чтобы выводить эти данные в файл TXT (CSV), который я использую fwrite (), который успешно создал файл, но сторонняя сторона, которую я передаю, говорит, что файл не является UTF-8. Я не уверен, что данные выводятся как UTF-8, как я могу это проверить? При входе на удаленный сервер через SSH, и я кожу файл, который я получаю Itâs a Когда я получаю файл, я получаю Itâ~@~Ys Когда я меньше, я получаю It<E2><80><99>s. Что мне здесь не хватает?

Заранее спасибо!

Это было полезно?

Решение 2

В конце концов, это был родитель, который требовался для правильного чтения файла.

Другие советы

Вы не можете обнаружить кодирование каких -либо данных. Кодирование всегда является метаинформацией рядом с самими данными.

Даже mb_detect_encoding() Попытка лучше всего это сделать, вы никогда не должны использовать их для автоматического обработки данных. Поскольку, поскольку невозможно обнаружить кодирование из самих данных, эта функция не может быть хорошо.

Не полагайтесь на это. Используйте его только для ручного осмотра, если вам нужно отладить проблему или в последней среде запасного, но никогда не в стандартных обрабатываниях данных. Даже тогда не доверяйте этой информации слишком сильно.

Как я могу так сказать? Просто пример: текст может быть обоснованно закодирован US-ASCII, и подпрограмма обнаружения для UTF-8 вернет, что он действительный UTF-8, закодированный. И это всего лишь один пример. Правда в том, что это намного сложнее.

Так что воспринимайте как должное, что вы не можете обнаружить кодирование из необработанных данных.

Вместо этого ищите мета -информацию, которая указывает кодирование. Если информация об кодировании не предоставлена, обратитесь за кодировкой по умолчанию в спецификационных документах для транспортировки данных.

В вашем случае хранения данных из RSS -каналов обратите внимание на информацию либо в заголовках ответов, так и/или пролог XML. Обычно он содержит кодирование в ISO обозначения документа.

Поскольку ваша база данных ожидает данных, закодированных как UTF-8, ваша обработка должна позаботиться о том, что только данные UTF-8 помещаются в базу данных. Поэтому проверьте и приобретите кодирование данных, а затем выполните шаги, необходимые для изменения кодирования. Но не полагайтесь на mb_detect_encoding() выполнить эти шаги.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top