运行以下代码后,我得到“No Match”:
$testcontent = '<div><p>Reader’s Digest & More!</p></div>';
$dom = new DOMDocument();
$dom->loadHTML($testcontent);
$xpath = new DOMXPath($dom);
$testcon = $xpath->query('*');
echo $testcontent . '<br />';
foreach ($testcon->item(0)->childNodes as $child) {
$savehtml = $dom->saveHTML($child);
}
echo $savehtml . '<br />';
if ($testcontent == $savehtml) {
echo "Match";
}
else {
echo "No Match";
}
任何人都可以告诉我为什么loadHTML
函数或saveHTML
函数似乎改变了我传入的HTML。我希望这段代码能够回应“匹配”,但由于某种原因,即使页面上的回显文本看起来都相同,第二个版本也有所改变,因为&
字符已更改为&
。反正有没有避免这种自动转换?
这是页面输出的来源:
<div><p>Reader’s Digest & More!</p></div>
<div><p>Reader’s Digest & More!</p></div>
No Match
您将在上面看到HTML如何被改变。
答案 0 :(得分:0)
要查看HTML,请使用DOMDocument::saveHTML() (or saveXML()).
可能会帮助你
答案 1 :(得分:0)
看起来DOMXPath
是问题的根源,因为当我有这个代码时
<?php
header("Content-Type: text/html; charset=utf-8");
$testcontent = '<div><p>Reader’s Digest & More!</p></div>';
$dom = new DOMDocument();
$dom->loadHTML($testcontent);
echo $dom->saveHTML(); //prints the correct html
$xpath = new DOMXPath($dom);
$testcon = $xpath->query('*');
echo $testcontent;
foreach ($testcon->item(0)->childNodes as $child) {
echo "CHILD : " . $child->textContext; //prints the wrong html
$savehtml = $dom->saveHTML($child);
}
echo $savehtml . '<br />';
if ($testcontent == $savehtml) {
echo "Match";
} else {
echo "No Match";
}
?>
打印CHILD : <div><p>Reader’s Digest & More!</p></div>