在HTML标签之间获取文本&取代他们

时间:2012-08-29 15:20:31

标签: php regex domdocument

我想在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标记,注释,javascripts脚本等等)并替换它们(将从数据库中选择替换值)以创建新的HTML输出。

最好和最优雅的方式是什么? DOM Document类是我需要的工具还是正则表达式是要走的路?

如果你能用一小段代码向我展示清楚的话,我将非常高兴。

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

1 个答案:

答案 0 :(得分: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);