Мне нужна помощь с проблемой кодирования символов, которую я хочу сортировать раз и навсегда. Вот пример некоторого контента, который я извлекаю из XML-фида, вставляю в свою базу данных, а затем вытаскиваю.
Как вы не видите, многие специальные символы html повреждаются / ломаются.
Как я могу раз и навсегда остановить это? Как я могу поддерживать все типы символов и т. Д.?
Я пробовал буквально каждый фрагмент кода, который я могу найти, иногда он исправляет его для большинства, но все же другие повреждены.
Чтобы абсолютно раз и навсегда убедиться, что у вас никогда не будет проблем с кодировкой:
Используйте UTF-8 везде и везде!
То есть (если вы используете mysql и php):
В разделе ваших HTML-документов укажите следующий метатег:
<meta http-equiv = "content-type" content = "text / html; charset = utf-8">
И пара бонусных советов:
ИЛИ:
Вы можете просто использовать один простой файл конфигурации на стороне сервера, который заботится обо всех материалах кодирования. В этом случае вам вообще не нужны заголовки и / или метатеги вообще или модификация файла 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'); }
Эти двое спасли меня, и я думаю, что сейчас он работает . Я вернусь, если я продолжу сталкиваться с проблемами. Должен ли я хранить его в БД, например, как «&» или «&»?