我需要加载一个HTML(可能带有DOMDocument loadHTML),然后将所有单词A替换为单词B,但不替换html标签内的任何内容。
这意味着在下面的html中,如果我们需要将'test'替换为'TEST',它只会用'这是一个测试'替换文本'这是一个测试'并保持完整的id = “测试”
<html>
<head></head>
<body>
<div id="test"> this is a test </div>
</body>
</html>
答案 0 :(得分:3)
无法获得足够的DOMDocument:)
$d = new DOMDocument;
$d->loadHTML($html);
$x = new DOMXPath($d);
foreach ($x->query('//text()') as $node) {
$node->nodeValue = str_replace('test', 'TEST', $node->nodeValue);
}
echo $d->saveHTML();
不确定在nodeValue
上始终进行替换是否有任何性能损失;否则,用:
$s = str_replace('test', 'TEST', $node->nodeValue, $count);
if ($count) {
$node->nodeValue = $s;
}
答案 1 :(得分:0)
您可以使用Simple html dom parser:
include("simple_html_dom.php");
...
$html = '
<html>
<head></head>
<body>
<div id="test"> this is a test </div>
</body>
</html>
';
$data = str_get_html($html);
$find = $data->find("div[id='test']",0);
$find->innertext = str_replace("test","TEST",$find->innertext);
$data = $data->save();
echo $data;
答案 2 :(得分:0)
如果您想要正则表达式,请查看此答案replace all "foo" between two HTML tags using REGEX (PHP code)