Как вернуть внешний 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>
Любые идеи, как достичь этого?
Ответы
Ответ 1
Начиная с PHP 5.3.6 вы можете передать node в saveHtml
, например.
$domDocument->saveHtml($nodeToGetTheOuterHtmlFrom);
Предыдущие версии PHP не реализовали эту возможность. Вы должны использовать saveXml()
, но это создало бы разметку, совместимую с XML. В случае элемента <a>
это не должно быть проблемой.
См. http://blog.gordon-oheim.biz/2011-03-17-The-DOM-Goodie-in-PHP-5.3.6/
Ответ 2
Вы можете найти пару предложений в примечаниях пользователей раздел 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;
}
?>
Ответ 3
Лучшим решением является определение вашей собственной функции, которая вернет вас outerhtml:
function outerHTML($e) {
$doc = new DOMDocument();
$doc->appendChild($doc->importNode($e, true));
return $doc->saveHTML();
}
чем вы можете использовать в своем коде
echo outerHTML($link);