2011-01-12 2 views
1

Я разбираю RSS-канал, в котором есть ’. SimpleXML превращает это в â € ™. Что я могу сделать, чтобы остановить это?PHP SimpleXML не обрабатывает & # 8217; правильно

Просто, чтобы ответить на некоторые из вопросов, которые возникли - я вытаскиваю RSS-канал, используя CURL. Если я вывожу его непосредственно в браузер, то ’ отобразится как ’, что и ожидается. Когда я создаю новый SimpleXMLElement, используя это, (например, $xml = new SimpleXmlElement($raw_feed); и сбросить переменную $xml, каждый экземпляр ’ заменяется â € ™.

Оказывается, что SimpleXML имеет проблемы с UTF-8 амперсандом закодированных символов. (The декларация XML определяет UTF-8.)

у меня есть контроль над подачей после CURL извлечет корм, прежде чем он используется для построения элемента SimpleXML.

+2

После того, как вы разобрали его, что вы делаете со значениями? Сохранение базы данных или ее отображение в браузере? – xil3

+0

Что вы ожидаете от этого? – Oded

+0

’ или ’ \t «правая одинарная кавычка» У вас есть контроль над RSS? –

ответ

0

свелось к тому, чтобы установить кодировку по умолчанию в UTF-8 в четырех местах:

  1. язык по умолчанию в заголовке файла: setlocale(LC_ALL, 'en_US.UTF8');
  2. Кодирование строку, которая выходит из CURL : utf8_encode($string);
  3. Настройка соединения MySQL использовать UTF-8 по умолчанию: mysqli_set_charset($database_insert_connection, 'utf8');
  4. Установка соответствующего сопоставления в базе данных MySQL для utf8_general_ci

При выводе в браузер настройки соответствующего заголовка (например, header ('Content-type: text/html; charset=utf-8');)

Надеюсь, это поможет кому-то в будущем!

2

’ представляет символ Unicode (U + 2019), что закодирован с 0xE28099 в UTF-8. И когда эта последовательность байтов интерпретируется с Windows-1252, он представляет символы â (0xE2), (0x80) и (0x99).

Это означает, что SimpleXML обрабатывает вход как кодировку UTF-8, но вы интерпретируете ее вывод как Windows-1252. И если вы действительно не хотите использовать Windows-1252, вам, вероятно, просто не хватает specify the character encoding of your output properly.

+0

Как я могу это сделать? – Matty

+0

@Matty: Как вы можете что-то сделать? – Gumbo

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