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 标记、注释、javascripts 脚本等)并替换它们(替换的值将从数据库中选择)以创建新的 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 回答