我使用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和其他),但后来我明白我不能考虑所有这些变体。我该如何解决这个问题?
如果你不理解我,请告诉我,我可以写出更好的解释。
谢谢,艾哈迈德。
答案 0 :(得分:7)
HTML实体未在XML中定义,这就是您收到这些错误的原因。您是否考虑过将loadHTML()
用于输入文档而不是loadXML()
?
$dom = new domDocument();
$dom->loadHTML($content);
答案 1 :(得分:3)
我认为如果您先通过html_entity_decode传递$ content,那么您的问题就会消失。