Php 如何返回DOMDocument的外部html?

Php 如何返回DOMDocument的外部html?,php,dom,outerhtml,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()

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

$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代码时(如


如何实现这一点有什么想法吗?

从PHP 5.3.6开始,您可以将节点传递到
saveHtml
,例如

$domDocument->saveHtml($nodeToGetTheOuterHtmlFrom);

以前的PHP版本没有实现这种可能性。您必须使用
saveXml()
,但这将创建符合XML的标记。对于一个

,您可以在PHP手册的用户注释中找到几个命题

例如,以下是由以下人员发布的:


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

function outerHTML($e) {
     $doc = new DOMDocument();
     $doc->appendChild($doc->importNode($e, true));
     return $doc->saveHTML();
}
您可以在代码中使用

echo outerHTML($link); 

使用href将文件重命名为links.html或links.html,表示其中包含flv的google.com/fly.html,或将flv更改为wmv等,如果存在其他href,则将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");
?>


谢谢,但实际上我正在寻找完整的外部html-完整的代码包括:/@Fuxi根据代码判断,我认为您必须将$OUTER设置为TRUE。但实际上没有理由使用该函数,因为您可以使用
saveXml
saveHTML
来获得我在回答中解释的outerHTML。@Gordon感谢您的评论:-)(我同意“使用saveHTML”的想法——如果使用PHP>=5.3.6)DOMNode还包含包含DOMDocument的节点,因此,如果您只需要获取HTML的节点:$DOMNode->ownerDocument->saveHTML($DOMNode),则可以执行此操作;仅适用于PHP<5.3.6,之后只需提供节点作为saveHTML()的参数,如Gordon所写。无需创建完整文档,只需保存单个节点即可。
  <?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");
?>