Проблемы с кодировкой символов PHP

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

Как вы не видите, многие специальные символы html повреждаются / ломаются.

Как я могу раз и навсегда остановить это? Как я могу поддерживать все типы символов и т. Д.?

Я пробовал буквально каждый фрагмент кода, который я могу найти, иногда он исправляет его для большинства, но все же другие повреждены.

Чтобы абсолютно раз и навсегда убедиться, что у вас никогда не будет проблем с кодировкой:

Используйте UTF-8 везде и везде!

То есть (если вы используете mysql и php):

  • Задайте все таблицы в вашей базе данных для сопоставления «utf8_general_ci», например.
  • После того как вы установили соединение с базой данных, запустите следующий SQL-запрос: «SET NAMES« utf8 »»
  • Всегда проверяйте, чтобы настройки вашего редактора были установлены в кодировку UTF-8.
  • В разделе ваших HTML-документов укажите следующий метатег:

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

И пара бонусных советов:

  • Когда вы используете PHP для обработки строк, используйте многобайтовые функции .
  • В какой-то момент вы также можете проверить http://docs.kohanaphp.com/core/utf8 .

ИЛИ:

Вы можете просто использовать один простой файл конфигурации на стороне сервера, который заботится обо всех материалах кодирования. В этом случае вам вообще не нужны заголовки и / или метатеги вообще или модификация файла php.ini. Просто добавьте нужную кодировку кодировки в файл .htaccess и поместите ее в свой корень www. Если вы хотите возиться со строками набора символов и использовать для этого свой php-код – это другая история. Корректировка базы данных должна быть правильной.

Сноска: UTF-8 – это не решение для кодирования, а решение. Не имеет значения, какой набор символов / кодировок используется, пока используемая среда принимает во внимание.

Моя любимая статья о кодировках от JoelOnSoftware: The Absolute Minimum Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о юникодном и символьном наборах

Кажется, что кодированный текст UTF-8 интерпретируется с помощью стандарта ISO 8859-1.

Если вы обрабатываете документы XML, вам необходимо использовать кодировку, заданную либо в параметре charset в поле заголовка HTTP Content-Type либо в атрибуте encoding в декларации XML . Если ни один из них не указан, спецификация XML объявляет UTF-8 или UTF-16 как кодировку символов по умолчанию, и вам нужно использовать некоторое обнаружение .

Похоже, что ссылка, которую вы указали, содержит данные, закодированные в utf-8. (Следуйте по этой ссылке, затем измените кодировку своего браузера на utf-8).

Похоже, у вас возникают проблемы с вставкой и извлечением из вашей базы данных. Убедитесь, что в вашей таблице базы данных установлен utf-8 как кодировка.

После того, как вы подключитесь к базе данных, но прежде чем выполнять какие-либо транзакции, выполните следующую строку, которая гарантирует, что вся связь с базой данных находится в UTF-8:

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $dbconn);

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

Вы пытались использовать utf8_encode() и utf8_decode() ?

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

 header('Content-type: text/html; charset=UTF-8') ; /** * Encodes HTML safely for UTF-8. Use instead of htmlentities. * * @param string $var * @return string */ function html_encode($var) { return htmlentities($var, ENT_QUOTES, 'UTF-8'); } 

Эти двое спасли меня, и я думаю, что сейчас он работает . Я вернусь, если я продолжу сталкиваться с проблемами. Должен ли я хранить его в БД, например, как «&» или «&»?