PHP SimpleXML не обрабатывается & # 8217; должным образом - PullRequest
1 голос
/ 12 января 2011

Я анализирую канал RSS, в котором есть ’.SimpleXML превращает это в.Что я могу сделать, чтобы остановить это?

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

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

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

Ответы [ 2 ]

2 голосов
/ 12 января 2011

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

Это означает, что SimpleXML обрабатывает ввод как кодированный UTF-8, но вы интерпретируете его как Windows-1252.И если вы действительно не хотите использовать Windows-1252, возможно, вам просто не хватает для правильного указания кодировки символов в выводе .

0 голосов
/ 14 января 2011

Это привело к необходимости установить кодировку по умолчанию 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');)

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

...