为什么xpath删除html特殊字符?

时间:2012-01-17 15:47:00

标签: php xpath domdocument

为什么这个

$html = '<a href="/browse/product.do?cid=1&amp;vid=1&amp;pid=1" class="productItemName">what is going on here</a>';

$dom = new DOMDocument();
$dom->loadhtml($html);
$xpath = new DOMXPath($dom);

$selectors['link'] = '//a/@href';
$links_nodeList = $xpath->query($selectors['link']);

foreach ($links_nodeList as $link) {
    $links[] = $link->nodeValue;
}

echo("<p>links</p>");
echo("<pre>");
print_r($links);
echo("</pre>");

输出

links

Array
(
    [0] => /browse/product.do?cid=1&vid=1&pid=1
)

而不是

links

Array
(
    [0] => /browse/product.do?cid=1&amp;vid=1&amp;pid=1
)

1 个答案:

答案 0 :(得分:6)

答案很简单

&amp;是一种在XML文档中表示字符"&"的特殊方式。

这两个表示相同的字符

当&符号的转义形式输出为文本(而不是XML)时,将其显示为"&"是正确的。

由@LarsH在其评论中进一步阐述

  

当你说loadhtml($html);时,你正在将字符串解析为HTML,   这意味着解释了字符实体(如&amp;)   进入他们所代表的角色(如&)。如果你想要一个字符串   这将被解释为&amp;,你需要逃脱&符号,   例如&amp;amp;