Как вернуть внешний html DOMDocument?

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

$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>

Любые идеи, как достичь этого?

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

 $domDocument->saveHtml($nodeToGetTheOuterHtmlFrom); 

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

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

Вы можете найти несколько предложений в примечаниях пользователей раздела 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; } ?> 

Лучшим решением является определение вашей собственной функции, которая вернет вам внешний HTML:

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

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

 echo outerHTML($link);