在HTML中将字符串替换为另一个字符串,但在HTML标记和属性中没有

时间:2012-06-08 14:25:21

标签: php html replace domdocument

我需要加载一个HTML(可能带有DOMDocument loadHTML),然后将所有单词A替换为单词B,但不替换html标签内的任何内容。

这意味着在下面的html中,如果我们需要将'test'替换为'TEST',它只会用'这是一个测试'替换文本'这是一个测试'并保持完整的id = “测试”

<html>
<head></head>
<body>
  <div id="test"> this is a test </div>
</body>
</html>

3 个答案:

答案 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)