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

saveHtmlPHP 5.3.6 以降では、ノードをに渡すことができます。

$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 に答える