Чтение в Malformed XML (некодированные объекты XML) с помощью PHP

У меня возникли проблемы с анализом неправильного XML в PHP. В частности, я обращаюсь к стороннему веб-сервису, который возвращает данные в формате XML без кодирования объектов XML в реальных данных. Например, один из элементов содержит сердце ASCII, «<3», без кавычек, которые анализатор XML видит в качестве открывающего тега. Он должен быть «& lt; 3».

Прямо сейчас я просто передаю XML-строку в SimpleXMLElement, который, как предсказуемо, терпит неудачу в этих случаях. Я немного огляделся, и, похоже, пакет PHP Tidy может мне помочь, но объем конфигурации, который вы можете сделать, огромен 🙁

Таким образом, мне просто интересно, есть ли у кого-то еще такая проблема, и если да, то как они смогли ее решить.

Благодаря!

Попробуйте tidy.repairString :

php > $tidy = new tidy(); php > $repaired = $tidy->repairString("<foo>I <3 Philadelphia</foo>", array("input-xml"=>1)); php > print($repaired); <foo>I &lt;3 Philadelphia</foo> php > $el = new SimpleXMLElement($repaired); 
  1. Прочитайте содержимое как строку.
  2. htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
  3. Загрузите преобразованную строку в SimpleXMLElement

Это действовало для меня до сих пор.