0

HTML タグ間のテキストを取得し、それらを動的に置き換えたいと考えています。HTML タグには何か (ネストされた HTML タグ、コメントなど) が含まれる可能性があることを考えると、DOM Documentクラスが適していると思います。しかし、私のニーズに合った例を見つけることができませんでした。特別に選択された html タグの間のテキストしか取得できません。選択したテキストを置き換える例も見つかりませんでした。

<?php 
// HTML OUTPUT
$html= "<p>Subject,</p>
<h1>H1 title</h1>
<h2>H2 title</h2>
<h3>H2 title</h3>";

// DESIRED OUTPUT
$newHTML "<p>My Fav. Colors;</p>
<h1>Blue</h1>
<h2>Orange</h2>
<h3>Yellow</h3>";
?>

基本的に、HTML 出力からテキストを動的に取得し (ネストされた HTML タグ、コメント、javascript スクリプトなどが含まれている可能性があります)、それらを置き換え (置き換えられた値はデータベースから選択されます)、新しい HTML 出力を作成します。

最善かつエレガントな方法は何ですか? DOM Documentクラスが必要なツールですか、それともRegex進むべき道ですか?

それを明確に理解するための小さなコードを示していただければ、本当にうれしいです。

問題のPS HTML ドキュメントは、別のドメインのページである可能性があります。http://anotherdomain.com/page.htmlなど。

4

1 に答える 1

2

DOM の例を次に示します。

$html= "<p>Subject,</p>
<h1>H1 title</h1>
<h2>H2 title</h2>
<h3>H2 title</h3>";

$doc = new DOMDocument;
$doc->loadHTML( '<div>' . $html . '</div>');

foreach($doc->getElementsByTagName('div')->item(0)->childNodes as $node) {
    switch ($node->nodeName) {
        case "p":
            $node->nodeValue = "My Fav. Colors";
            break;
        case "h1":
            $node->nodeValue = "Blue";
            break;
        case "h2":
            $node->nodeValue = "Orange";
            break;
        case "h3":
            $node->nodeValue = "Yellow";
            break;          
    }
}
echo $doc->saveXML($doc);
于 2012-08-30T07:07:40.210 に答える