Я пытаюсь заменить видео-ссылки внутри строки – вот мой код:
$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);