如何防止DOMXPath扩展HTML实体?

时间:2011-05-15 09:47:58

标签: php xml dom xpath html-entities

我在PHP中使用DOMDocument和DOMXPath来查找HTML文档中的元素。 本文档包含HTML实体,例如& nbsp;我希望这些实体保留在XPath输出中。

$doc = new DOMDocument();
$doc->loadHTML('<html><head></head><body>&nbsp;Test</body></html>');

$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//body');

foreach($nodes as $node) {
    echo $node->textContent;
}

此代码生成以下输出(UTF-8):

[space]Test

但我想有这个:

&nbsp;Test

也许它与PHP在内部使用的LibXML有关,但我找不到任何保留HTML实体的函数。

你有什么想法吗?

2 个答案:

答案 0 :(得分:4)

XPath始终会看到已扩展实体引用的XML文档的表示形式。防止这种情况的唯一方法是预处理XML文档,用不会展开的东西替换实体引用,例如将&nbsp;更改为§nbsp;

答案 1 :(得分:2)

XPath处理器不知道不间断的空格字符被指定为&nbsp;&#xA0;' -- the character is always provided to it as a character entity --`。