Предупреждение: DOMDocument :: loadXML () [function.DOMDocument-loadXML]: объект «laquo» не определен в объекте - PullRequest
4 голосов
/ 19 марта 2011

Я перехватываю ответ сервера, используя xml, xsl, и извлекаю необходимые фрагменты, чтобы извлечь фрагменты html из отклика сервера по требованию клиента. Например, предположим, что $ content имеет ответ сервера, прежде чем мы его обработаем.

    $dom = new domDocument();
    $dom->loadXML($content);
    $xslProgram = <<<xslProgram
<xsl:stylesheet version='1.0'
 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<xsl:output method="html" encoding='UTF-8' indent="yes" />

<xsl:template match="/">
    <xsl:copy-of select="$select" />
</xsl:template>

</xsl:stylesheet>
xslProgram;

    $domXsl = new domDocument();
    $domXsl->loadXML($xslProgram);
    $xsl = new XSLTProcessor();
    $xsl->importStylesheet($domXsl);

    $content = $xsl->transformToXml($dom);

Похоже, что все работает правильно, но когда он обнаруживает & nbsp, & laquo, & raquo и т. Д., Появляется сообщение «Предупреждение: DOMDocument :: loadXML () [function.DOMDocument-loadXML]: объект« laquo »не определено в сущности "

Сначала я просто заменил все эти элементы (& nbsp и другие) их эквивалентами в юникоде (str_replace), но потом я понимаю, что не могу рассмотреть все эти варианты. Как я могу решить эту проблему?

Дайте мне знать, если вы не понимаете меня, я могу написать лучшее объяснение.

Спасибо, Ахмед.

Ответы [ 2 ]

7 голосов
/ 19 марта 2011

Сущности HTML не определены в XML, поэтому вы получаете эти ошибки.Рассматривали ли вы использовать loadHTML() для входного документа вместо loadXML()?

$dom = new domDocument();
$dom->loadHTML($content);

http://php.net/manual/en/domdocument.loadhtml.php

3 голосов
/ 19 марта 2011

Я думаю, что если вы сначала пропустили $ content через html_entity_decode , ваши проблемы исчезнут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...