我想在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。
答案 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);