如何在不替换HTML标签或属性的情况下替换HTML dom内部或外部的内容?
例如
$txt='good <div class="good">good</div>'
$search='good';
$pattern = '#(?!<.*?)(\b'.$search.'\b)(?![^<>]*?>)#si';
$replacement = 'nice';
$txt = preg_replace($pattern, $replacement, $txt);
因此,我希望它输出nice <div class="good">nice</div>
并忽略任何属性中的good
,因为标签和属性是动态的,我不知道,这只是示例。
答案 0 :(得分:2)
尝试使用dom:
$txt='good <div class="good">good</div>';
$search = 'good';
$replace = 'nice';
libxml_use_internal_errors(true);
$dom = new DomDocument();
$dom->loadHTML($txt, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//text()') as $text) {
if (trim($text->nodeValue)) {
$text->nodeValue = str_replace($search,$replace, $text->nodeValue);
}
}
echo $dom->saveHTML();