如何用PHP替换HTML中的任何文本内容?

时间:2019-06-13 08:40:16

标签: php domdocument domxpath

我想替换html标记内的任何文本。 替换字符串应能够包含HTML。 请勿触摸所有标签属性(id,class,src,href ..)

我尝试用DOMDocument加载HTML。使用DOMXPath搜索任何textnode并覆盖nodeValue。我曾尝试创建一个createDocumentFragment并使用replaceChild将旧节点替换为新节点。

$searchword = "TEST";
$replaceword = "I&#039;ll co&shy;me & <u> &quot; get <span>you</span> &quot; </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”。

0 个答案:

没有答案