2009-05-05 2 views
4

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

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

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

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

+0

В какой момент они появляются «сломанный «? Если вы просматриваете канал в браузере, видите ли вы тарабарщину или правильные символы? Есть ли атрибут «encoding» в объявлении XML? –

+0

Просто подумайте, но можете ли вы рассказать нам, какой символ задал ваши таблицы базы данных? Если вы выполните «SHOW CREATE TABLE tblname;» на ваших таблицах в MySQL вы должны увидеть что-то в конце, например «DEFAULT CHARSET = utf8». – zombat

+0

Ваш код исчез из Интернета. Пожалуйста, добавьте его снова к своему вопросу, иначе это будет удалено. Пожалуйста, позаботьтесь о том, чтобы задать важную часть, о которой вы спрашиваете, в самом вопросе! – hakre

ответ

-1
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'); 
} 

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

+1

Почему вы используете ссылки на символы, хотя UTF-8 может кодировать чрезмерный символ? Использование 'htmlspecialchars' для замены только специального символа HTML будет достаточным, если вы действительно должны заменить их. – Gumbo

3

Моя любимая статья о кодировках от JoelOnSoftware: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

+0

Очень полезный, но до сих пор не помогающий мне до сих пор :(Мне нужен какой-то конкретный совет PHP – James

+0

Эта статья Джоэла была/была полезной, но она сортирует или боковую сторону того факта, что поддержка Unicode «сломана/выиграна» - это так много продуктов, которые очень сложно определить, что является хорошим гражданином, а тем более реализовать его. –

0

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

1

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

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

0

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

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

1

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

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

11

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

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

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

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

    < META HTTP-эквив = "Content-Type" содержание = "текст/html; кодировка = UTF-8" >

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

ИЛИ:

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

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

+1

«SET NAMES« utf8 »- хороший совет. –

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^