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