Php 突出显示文本:如何用所有标记回显HTML DOM元素

Php 突出显示文本:如何用所有标记回显HTML DOM元素,php,dom,html-parsing,Php,Dom,Html Parsing,我想突出显示HTML文档正文中指定的关键字。起初,我使用preg_replace在关键字周围放置一个,但是如果关键字是标记的一部分,当然会导致问题,比如字母“I”(如)。因此,我使用DOM::loadHTMLFile(path)加载文档,然后在每个子级的值中使用preg_replace 到目前为止,一切顺利。我可以用适当的突出显示的单词和标签的干扰来呼应文档的纯文本。但是我需要回显整个正文,包括更改后的标记,我不知道如何回显。以下是我目前掌握的情况: if (file_exists('mss/'

我想突出显示HTML文档正文中指定的关键字。起初,我使用preg_replace在关键字周围放置一个,但是如果关键字是标记的一部分,当然会导致问题,比如字母“I”(如
  • )。因此,我使用DOM::loadHTMLFile(path)加载文档,然后在每个子级的值中使用preg_replace

    到目前为止,一切顺利。我可以用适当的突出显示的单词和标签的干扰来呼应文档的纯文本。但是我需要回显整个正文,包括更改后的标记,我不知道如何回显。以下是我目前掌握的情况:

    if (file_exists('mss/'.$link_title)) {
            $descfile = DOMDocument::loadHTMLFile('mss/'.$link_title);
            foreach ($descfile->childNodes as $e) {
                $desc_output = $e->nodeValue;
                $desc_output = preg_replace($to_highlight, "<span class=\"highlight\">$0</span>", $desc_output);
                }
            echo ???
        }
    
    if(文件存在('mss/'.$link\u title)){
    $descfile=DOMDocument::loadHTMLFile('mss/'。$link_title);
    foreach($descfile->childNodes作为$e){
    $desc_输出=$e->nodeValue;
    $desc_output=preg_replace($to_highlight,$0“,$desc_output);
    }
    回响
    }
    

    我应该回显什么?

    如果您将代码更改为:

    $e->nodeValue = preg_replace($to_highlight, "<span class=\"highlight\">$0</span>", $e->nodeValue);
    
    $e->nodeValue=preg\u replace($to\u突出显示,$0,$e->nodeValue);
    
    您可能可以使用:

    输出整个html文档。

    这不起作用,
    nodeValue
    将自然地将
    作为X(H)TML实体
    写入文档,使用
    saveHTML()
    时可以看到。可能的重复