Проблемы с кодировкой символов PHP - PullRequest
4 голосов
/ 05 мая 2009

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

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

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

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

Ответы [ 8 ]

11 голосов
/ 07 мая 2009

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

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

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

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

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

OR

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

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

3 голосов
1 голос
/ 23 декабря 2009

После подключения к базе данных, но перед выполнением каких-либо транзакций, выполните следующую строку, которая гарантирует, что все взаимодействие с базой данных происходит в 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);

1 голос
/ 05 мая 2009

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

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

1 голос
/ 05 мая 2009

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

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

0 голосов
/ 05 мая 2009
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');
}

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

0 голосов
/ 05 мая 2009

Вы пробовали utf8_encode() и utf8_decode()?

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

0 голосов
/ 05 мая 2009

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

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