Как запретить DOMXPath расширять сущности HTML? - PullRequest
6 голосов
/ 15 мая 2011

Я использую DOMDocument и DOMXPath в PHP, чтобы найти элементы в документе HTML.Этот документ содержит HTML-объекты, такие как;и я хотел бы, чтобы эти объекты были сохранены в выводе 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

Но я хотел бы иметьthis:

&nbsp;Test

Возможно, это как-то связано с LibXML, который PHP использует внутри, но я не смог найти ни одной функции, которая бы сохраняла сущности HTML.

У вас есть идея?

Ответы [ 2 ]

4 голосов
/ 16 мая 2011

XPath всегда видит представление документа XML, в котором ссылки на сущности были расширены.Единственный способ предотвратить это - предварительно обработать XML-документ, заменив ссылки на сущности чем-либо, что не будет расширено, например, изменив &nbsp; на §nbsp;.

2 голосов
/ 16 мая 2011

Процессор XPath не знает, был ли указан символ без пробела как &nbsp; или как &#xA0;' -- the character is always provided to it as a character entity -- `.

...