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

看起来一切正常,但当它检测到“laquo”等时,会显示一条消息“warning:domdocument::loadxml()[function.domdocument loadxml]:实体“laquo”未在实体中定义”
起初,我只是将所有这些元素(以及其他元素)替换为它们的unicode equivalent(str_replace),但后来我明白,我不能考虑所有这些变体。我怎样才能解决这个问题?
如果你不理解我,让我知道,我可以写更好的解释。
谢谢,艾哈迈德。

最佳答案

html实体不是用xml定义的,这就是为什么会出现这些错误。您是否考虑过对输入文档使用loadHTML()而不是loadXML()

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

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

07-26 05:17