首页 文章

PHP DOM得到nodevalue html? (没有剥离标签)

提问于
浏览
20

我试图使用nodeValue在文件中获取div标签的innerhtml,但是这段代码只输出纯文本,似乎从div中删除所有html标签 . 如何更改此代码以输出div的HTML内容而不是纯文本,并且还输出包含其子元素的主div .

例:

file.txt的内容:

<div class="1"><span class="test">text text text</span></div>
<div class="2"><span class="test">text text text</span></div>
<div class="3"><span class="test">text text text</span></div>

script.php的:

$file= file_get_contents('file.txt');

    $doc = new DOMDocument();

    @$doc->loadHTML('<?xml encoding="UTF-8">'.$file); 

    $entries = $doc->getElementsByTagName('div');

        for ($i=0;$i<$entries->length;$i++) {
            $entry = $entries->item($i);
            echo $entry->nodeValue;
        }

输出:文本文本文本文本文本文本文本文本

我需要它输出:

<div class="1"><span class="test">text text text</span></div>
<div class="2"><span class="test">text text text</span></div>
<div class="3"><span class="test">text text text</span></div>

请注意,需要输出父div(..etc)以及包装span标签...

救命!

2 回答

  • 8

    我从来没有做过你想要做的事情,但是在黑暗中,使用API文档,确实是echo $ entry-> textContent;工作?

    添加更新 . 这是来自DOMNode的文档页面上的评论:

    嗨!

    结合所有注释,获取节点内部HTML的最简单方法是使用此函数:

    <?php  function get_inner_html( $node ) { 
        $innerHTML= ''; 
        $children = $node->childNodes; 
        foreach ($children as $child) { 
            $innerHTML .= $child->ownerDocument->saveXML( $child ); 
        } 
    
        return $innerHTML;  }  ?>
    

    或者,也许更简单的方法是:

    echo $domDocument->saveXML($entry);
    
  • 28

    代替:

    echo $entry->nodeValue;
    

    你必须使用:

    echo $doc->saveXML($entry);
    

    这是一个可能对其他人有帮助的更完整的示例, $doccontent 是HTML块作为字符串:

    $doccontent = '<html> …'; // your html string
    $dom = new DOMDocument;
    $internalErrors = libxml_use_internal_errors(true); // prevent error messages 
    $content_utf = mb_convert_encoding($doccontent, 'HTML-ENTITIES', 'UTF-8'); // correct parsing of utf-8 chars
    $dom->loadHTML($content_utf);
    libxml_use_internal_errors($internalErrors); // prevent error messages 
    $specialdiv = $dom->getElementById('xdiv');
    if(isset($specialdiv))
    {
        echo $dom->saveXML($specialdiv);
    }
    

相关问题