【问题标题】:DomDocument parse Newline works with span but not imgDomDocument 解析换行适用于 span 但不适用于 img
【发布时间】:2016-05-19 01:39:49
【问题描述】:

请看这里:https://ideone.com/bjs3IC

为什么换行符能正确显示spans 而不是imgs?

<?php
    outputImages();
    outputSpans();




    function outputImages(){
        $html = "<div class='test'>
                    <pre>
                    <img src='http://d...content-available-to-author-only...e.com/5x5/000/fff'>
                    <img src='http://d...content-available-to-author-only...e.com/5x5/000/fff'>
                    <img src='http://d...content-available-to-author-only...e.com/5x5/000/fff'>
                    </pre>
                </div>";
        getHtml($html);
    }


    function outputSpans(){
        $html = "<div class='test'>
                    <pre>
                    <span>a</span>
                    <span>b</span>
                    <span>c</span>
                    </pre>
                </div>";
        getHtml($html);
    }


    function getHtml($html){
        $doc = new DOMDocument;
        $doc->loadhtml($html);
        $xpath = new DOMXPath($doc);
        $tags = $xpath->query('//div[@class="test"]');
        print(get_inner_html($tags[0]));
    }


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

        return $innerHTML;
    }

【问题讨论】:

    标签: php xml dom newline


    【解决方案1】:

    DOMDocument::loadHTML 函数有第二个options 参数。看起来LIBXML_NOBLANKS 是那里的(至少一个)默认值。

    你可以使用

    $doc->loadhtml($html, LIBXML_NOEMPTYTAG);
    

    要覆盖该默认值,您的代码对于两个示例的工作方式相同。

    附言
    不知道你为什么使用

    print(get_inner_html($tags[0]));
    

    $tags 变量是一个DOMNodeList,所以你应该使用$tags-&gt;item(0) 来获取第一个标签。

    您的完整代码应如下所示:

    outputImages();
    outputSpans();
    
    function outputImages() {
        $html = "<div class='test'>
                    <pre>
                    <img src='http://d...content-available-to-author-only...e.com/5x5/000/fff'>
                    <img src='http://d...content-available-to-author-only...e.com/5x5/000/fff'>
                    <img src='http://d...content-available-to-author-only...e.com/5x5/000/fff'>
                    </pre>
                </div>";
        getHtml($html);
    }
    
    function outputSpans() {
        $html = "<div class='test'>
                    <pre>
                    <span>a</span>
                    <span>b</span>
                    <span>c</span>
                    </pre>
                </div>";
        getHtml($html);
    }
    
    function getHtml($html) {
        $doc = new DOMDocument;
        $doc->loadHTML($html, LIBXML_NOEMPTYTAG);
        $xpath = new DOMXPath($doc);
        $tags = $xpath->query('//div[@class="test"]');
        print(get_inner_html($tags->item(0)));
    }
    
    function get_inner_html( $node ) {
        $innerHTML= '';
        $children = $node->childNodes;
        foreach ($children as $child) {
            $innerHTML .= $child->ownerDocument->saveXML( $child );
        }
        return $innerHTML;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2013-08-04
      • 1970-01-01
      • 2014-03-10
      • 2020-04-06
      • 1970-01-01
      • 2020-07-29
      相关资源
      最近更新 更多