我想替换html标记内的任何文本。 替换字符串应能够包含HTML。 请勿触摸所有标签属性(id,class,src,href ..)
我尝试用DOMDocument加载HTML。使用DOMXPath搜索任何textnode并覆盖nodeValue。我曾尝试创建一个createDocumentFragment并使用replaceChild将旧节点替换为新节点。
$searchword = "TEST";
$replaceword = "I'll co­me & <u> " get <span>you</span> " </u>.";
$replaceword = html_entity_decode($replaceword);
$replaceword = htmlspecialchars_decode($replaceword, ENT_QUOTES);
$replaceword = html_entity_decode($replaceword);
function replace($searchword, $replaceword, $html) {
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//body//text()') as $node) {
if (trim($node->nodeValue)) {
$replacedContent = str_replace($searchword,$replaceword, $node->wholeText);
$newNode = $doc->createDocumentFragment();
$newNode->appendXML($replacedContent);
$node->parentNode->replaceChild($newNode, $node);
}
}
return $doc->saveHTML();
}
此功能能够将字符串“ TEST”替换为字符串“ REPLACED”。但是它无法用任何类似“ TEST ”
的html替换字符串“ TEST”。