在HTML标记之间获取文本&;更换它们


Getting Text Between HTML Tags & Replacing Them

我想在HTML标记之间获取文本并动态替换它们。考虑到HTML标记可能包含任何内容(嵌套的HTML标记、注释等),我认为DOM文档类是可行的。然而,我找不到任何适合我需要的例子。我只能获取特定选择的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文档类是我需要的工具,还是Regex是我要走的路?

如果你能给我看一小段代码,让我清楚地理解它,我会非常高兴。

p.S.有问题的HTML文档可能是另一个域上的页面。例如http://anotherdomain.com/page.html.

这里是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);