У меня возникли проблемы с анализом неправильного 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 <3 Philadelphia</foo> php > $el = new SimpleXMLElement($repaired);
htmlspecialchars(preg_replace('/[\x-\x8\xb-\xc\xe-\x1f]/','',$string))
Это действовало для меня до сих пор.