복붙노트

DOMDocument의 바깥 HTML을 반환하는 방법?

PHP

DOMDocument의 바깥 HTML을 반환하는 방법?

문자열 내부의 비디오 링크를 대체하려고합니다. 여기 내 코드가 있습니다.

$doc = new DOMDocument();
$doc->loadHTML($content);
foreach ($doc->getElementsByTagName("a") as $link) 
{
    $url = $link->getAttribute("href");
    if(strpos($url, ".flv"))
    {
        echo $link->outerHTML();
    }
}

불행히도, 와 같은 전체 하이퍼 링크에 대한 html 코드를 얻으려고 할 때 outerHTML이 작동하지 않습니다.

어떤 아이디어가 이것을 달성하는 방법?

해결법

  1. ==============================

    1.PHP 5.3.6부터 saveHtml에 노드를 전달할 수 있습니다.

    PHP 5.3.6부터 saveHtml에 노드를 전달할 수 있습니다.

    $domDocument->saveHtml($nodeToGetTheOuterHtmlFrom);
    

    이전 버전의 PHP는 그러한 가능성을 구현하지 못했습니다. saveXml ()을 사용해야하지만 XML 준수 마크 업을 생성합니다. 요소의 경우에는 문제가되지 않습니다.

    http://blog.gordon-oheim.biz/2011-03-17-The-DOM-Goodie-in-PHP-5.3.6/을 참조하십시오.

  2. ==============================

    2.PHP Manual의 DOM 섹션에있는 사용자 노트에서 두 가지 명제를 찾을 수 있습니다.

    PHP Manual의 DOM 섹션에있는 사용자 노트에서 두 가지 명제를 찾을 수 있습니다.

    예를 들어, xwisdom이 올린 글은 다음과 같습니다.

    <?php
    // code taken from the Raxan PDI framework
    // returns the html content of an element
    protected function nodeContent($n, $outer=false) {
        $d = new DOMDocument('1.0');
        $b = $d->importNode($n->cloneNode(true),true);
        $d->appendChild($b); $h = $d->saveHTML();
        // remove outter tags
        if (!$outer) $h = substr($h,strpos($h,'>')+1,-(strlen($n->nodeName)+4));
        return $h;
    }
    ?> 
    
  3. ==============================

    3.최선의 해결책은 outerhtml을 돌려 줄 함수를 정의하는 것입니다.

    최선의 해결책은 outerhtml을 돌려 줄 함수를 정의하는 것입니다.

    function outerHTML($e) {
         $doc = new DOMDocument();
         $doc->appendChild($doc->importNode($e, true));
         return $doc->saveHTML();
    }
    

    코드에서 사용할 수있는 것보다

    echo outerHTML($link); 
    
  4. from https://stackoverflow.com/questions/5404941/how-to-return-outer-html-of-domdocument by cc-by-sa and MIT license