Fux*_*uxi 15 php dom outerhtml
我正在尝试替换字符串中的视频链接 - 这是我的代码:
$doc = new DOMDocument();
$doc->loadHTML($content);
foreach ($doc->getElementsByTagName("a") as $link)
{
$url = $link->getAttribute("href");
if(strpos($url, ".flv"))
{
echo $link->outerHTML();
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,outerHTML当我试图获取完整超链接的html代码时不起作用<a href='http://www.myurl.com/video.flv'></a>
任何想法如何实现这一目标?
Gor*_*don 18
从PHP 5.3.6开始,您可以将节点传递给saveHtml,例如
$domDocument->saveHtml($nodeToGetTheOuterHtmlFrom);
Run Code Online (Sandbox Code Playgroud)
以前版本的PHP没有实现这种可能性.您必须使用saveXml(),但这将创建符合XML的标记.在<a>元素的情况下,这应该不是问题.
见http://blog.gordon-oheim.biz/2011-03-17-The-DOM-Goodie-in-PHP-5.3.6/
您可以在PHP手册的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;
}
?>
Run Code Online (Sandbox Code Playgroud)
最好的解决方案是定义您自己的函数,该函数将返回外层html:
function outerHTML($e) {
$doc = new DOMDocument();
$doc->appendChild($doc->importNode($e, true));
return $doc->saveHTML();
}
Run Code Online (Sandbox Code Playgroud)
比你可以在你的代码中使用
echo outerHTML($link);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9992 次 |
| 最近记录: |