Как вернуть внешний HTML DOMDocument? - PullRequest
15 голосов
/ 23 марта 2011

Я пытаюсь заменить ссылки на видео внутри строки - вот мой код:

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

К сожалению, outerHTML не работает, когда я пытаюсь получить HTML-код для полнойгиперссылка вроде <a href='http://www.myurl.com/video.flv'></a>

Есть идеи как этого добиться?

Ответы [ 3 ]

18 голосов
/ 23 марта 2011

Начиная с PHP 5.3.6, вы можете передать узел на saveHtml, например,

$domDocument->saveHtml($nodeToGetTheOuterHtmlFrom);

Предыдущие версии PHP не реализовывали такую ​​возможность. Вам придется использовать saveXml(), но это создаст XML-совместимую разметку. В случае элемента <a> это не должно вызывать проблем.

См. http://blog.gordon -oheim.biz / 2011-03-17-The-DOM-Good-in-PHP-5.3.6 /

6 голосов
/ 23 марта 2011

Вы можете найти пару предложений в заметках пользователей в разделе DOM Руководства по PHP.

Например, вот одно, опубликованное 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;
}
?> 
4 голосов
/ 27 января 2014

Лучшее возможное решение - определить вашу собственную функцию, которая будет возвращать вас externalhtml:

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

, чем вы можете использовать в своем коде

echo outerHTML($link); 
...