почему xpath удаляет html специальные символы?

почему это

$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 ) 

?

Ответ прост :

&amp; является особым способом представления символа "&" в XML-документе.

Эти два обозначают один и тот же символ .

Когда экранированная форма амперсанда выводится как текст (а не как XML), его отображение как "&" является правильным.

Как далее пояснил @LarsH в своем комментарии :

когда вы скажете loadhtml($html) ; вы loadhtml($html) строку как HTML, что означает, что объекты символов (например, &amp; ) интерпретируются в символах, которые они представляют (например, & ). Если вам нужна строка, которая будет интерпретироваться как &amp; , вам нужно избежать амперсанда, например &amp;amp;