警告:DOMDocument :: loadXML()[function.DOMDocument-loadXML]:实体'laquo'未在实体中定义

时间:2011-03-19 10:39:34

标签: php xml parsing

我使用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);

看起来一切正常,但当它检测到&amp; nbsp,&amp; laquo,&amp; raquo等时,会出现一条消息“警告:DOMDocument :: loadXML()[function.DOMDocument-loadXML] :实体'laquo'未在实体中定义“

起初我只是用他们的unicode equiavalents(str_replace)替换了所有这些元素(&amp; nbsp和其他),但后来我明白我不能考虑所有这些变体。我该如何解决这个问题?

如果你不理解我,请告诉我,我可以写出更好的解释。

谢谢,艾哈迈德。

2 个答案:

答案 0 :(得分:7)

HTML实体未在XML中定义,这就是您收到这些错误的原因。您是否考虑过将loadHTML()用于输入文档而不是loadXML()

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

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

答案 1 :(得分:3)

我认为如果您先通过html_entity_decode传递$ content,那么您的问题就会消失。