Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php loadHTML/saveHTMLDOM问题_Php_Html_Dom_Xpath - Fatal编程技术网

Php loadHTML/saveHTMLDOM问题

Php loadHTML/saveHTMLDOM问题,php,html,dom,xpath,Php,Html,Dom,Xpath,运行以下代码后,我得到“不匹配”: 您将在上面看到HTML是如何被改变的。要查看HTML,请使用DOMDocument::saveHTML()(或saveXML())。 希望它能帮助您看起来问题的根源是DOMXPath,因为当我有这个代码时 <?php header("Content-Type: text/html; charset=utf-8"); $testcontent = '<div><p>Reader&rsquo;s Digest

运行以下代码后,我得到“不匹配”:


您将在上面看到HTML是如何被改变的。

要查看HTML,请使用
DOMDocument::saveHTML()(或saveXML())。


希望它能帮助您

看起来问题的根源是
DOMXPath
,因为当我有这个代码时

<?php
    header("Content-Type: text/html; charset=utf-8");
    $testcontent = '<div><p>Reader&rsquo;s Digest &amp; 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:读者文摘&;更多

我将使用LIBXML常量和html编码/解码函数将文本转换为标准格式,然后再将其交给DOMDocument(使用LIBXML)。
DOMDocument
解析给定字符串,并将其转换为完整的DOM树,其中包含
标记。原始字符串没有这些标记,因此这两个字符串将不匹配。也许关于如何获取相同的DOM片段,为什么不查看页面源代码呢;我在上面的问题中添加了页面来源。您将看到两个echo语句的输出。
<div><p>Reader&rsquo;s Digest & More!</p></div>
<div><p>Reader’s Digest &amp; More!</p></div>
No Match
<?php
    header("Content-Type: text/html; charset=utf-8");
    $testcontent = '<div><p>Reader&rsquo;s Digest &amp; 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";
    }
?>