Специфичные для HTML сущности - в данном случае
- не являются действительными сущностями XML, и именно на это жалуется Simplexml;он читает файл как xml (не html) и находит недопустимые объекты.Вам нужно сначала преобразовать HTML-сущности обратно в их символьное представление (для этого можно использовать html_entity_decode () )
$str = "some string containing html";
// this line will convert back html entities to regular characters
$str = html_entity_decode($str, ...);
// now convert special character to their xml entities
$str = str_ireplace(array('<','>','&','\'','"'),array('<','>','&',''','"'),$str);
save_to_xml($str);
Обратите внимание, что если вы ранее использовали htmlentities () в своей строкесохраняя его в xml, это и является источником вашей проблемы (поскольку вы конвертируете символ html в соответствующие им объекты html, которые не распознаются симплексом как объекты xml).
// this won't work, the html entities it will uses are not valid xml entities
$str = htmlentities($str, ...)
save_to_xml($str);
Если у вас естьПроблемы с пониманием этого, думать о нем как о двух разных языках, таких как испанский (html) и английский (xml), допустимое слово в испанском () не означает, что оно также действительно в английском языке, независимо от сходства между этими двумя языками.