Сущность 'acirc' не определена из simplexml_load_string - PullRequest
4 голосов
/ 06 июля 2011

Итак, у меня есть PHP-скрипт, который анализирует XML-ответ от Google Analytics.Он работал в течение нескольких недель, но сегодня я получаю это предупреждение, и простая строка загрузки xml не преобразует ответ xml в объект simplexml.

Сообщение: simplexml_load_string ():Сущность: строка 743: ошибка синтаксического анализатора: сущность 'acirc' не определена

Я пробовал utf8_encoding ответа, прежде чем передать его в simplexml_load_string, но он не работает.Я полагаю, что acirc является закодированным символом, и что этот символ как-то портит синтаксический анализатор?

Я получаю предупреждение выше дважды, а затем я получаю это дважды также:

Сообщение: simplexml_load_string (): Сущность: строка 743: ошибка синтаксического анализатора: Сущность 'цент' не определена

Любой совет будет огромной помощью, спасибо!

Спасибо за комментарийМарк, я пробовал это:

$xml = simplexml_load_string(htmlspecialchars_decode($response_body));

И я получаю интересную ошибку, но объект XML все еще пуст:

Объект: строка 743: ошибка синтаксического анализатора: Входнеправильный UTF-8, укажите кодировку!Байты: 0x84 0x26 0x63 0x65

1 Ответ

5 голосов
/ 06 июля 2011

Строка, из которой вы хотите создать элемент SimpleXMLElement, не является допустимым XML. Простая функция xml может работать только с действительным XML. За все недействительные вы получите ошибки, а не элемент. Когда вы уже поиграли с данными, вы увидели некоторые ошибки.

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

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

Edit:

Вы копируете и вставляете его из браузера? Если это так, попробуйте запустить html_entity_decode() перед загрузкой в ​​формате XML Возможно, вы загружаете не XML, а HTML. Вместо этого лучше использовать DomDocument и функцию loadHTML, тогда не нужно ничего декодировать.

...