16

我正在尝试替换字符串中的视频链接 - 这是我的代码:

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

任何想法如何实现这一目标?

4

4 回答 4

23

从 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/

于 2011-03-23T12:05:20.113 回答
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;
}
?> 
于 2011-03-23T12:05:37.500 回答
5

最好的解决方案是定义您自己的函数,该函数将返回outerhtml:

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

比你可以在你的代码中使用

echo outerHTML($link); 
于 2014-01-27T13:35:25.443 回答
0

将带有 href 的文件重命名为 links.html 或 links.html 以说出其中包含 flv 的 google.com/fly.html 或将 flv 更改为 wmv 等,如果还有其他 href,它也会从中获取它们

  <?php
  $contents = file_get_contents("links.html");
  $domdoc = new DOMDocument();
  $domdoc->preservewhitespaces=“false”;
  $domdoc->loadHTML($contents);
  $xpath = new DOMXpath($domdoc);
  $query = '//@href';
  $nodeList = $xpath->query($query);
  foreach ($nodeList as $node){
    if(strpos($node->nodeValue, ".flv")){
      $linksList = $node->nodeValue;
      $htmlAnchor = new DOMElement("a", $linksList);
      $htmlURL = new DOMAttr("href", $linksList);
      $domdoc->appendChild($htmlAnchor);
      $htmlAnchor->appendChild($htmlURL);
      $domdoc->saveHTML();
      echo ("<a href='". $node->nodeValue. "'>". $node->nodeValue. "</a><br />");
    }
  }
echo("done");
?>
于 2020-05-16T16:29:25.207 回答