почему это
$html = '<a href="/browse/product.do?cid=1&vid=1&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&vid=1&pid=1 )
?
Ответ прост :
&
является особым способом представления символа "&"
в XML-документе.
Эти два обозначают один и тот же символ .
Когда экранированная форма амперсанда выводится как текст (а не как XML), его отображение как "&"
является правильным.
Как далее пояснил @LarsH в своем комментарии :
когда вы скажете
loadhtml($html)
; выloadhtml($html)
строку как HTML, что означает, что объекты символов (например,&
) интерпретируются в символах, которые они представляют (например,&
). Если вам нужна строка, которая будет интерпретироваться как&
, вам нужно избежать амперсанда, например&amp;