突出文本中的搜索关键字

时间:2010-02-26 16:31:50

标签: php

我正在使用此课程突出显示一段文字上的搜索关键字:

    class highlight
    {
        public $output_text;

        function __construct($text, $words)
        {
            $split_words = explode( " " , $words );
            foreach ($split_words as $word)
            {
                $text = preg_replace("|($word)|Ui" ,
                           "<font style=\"background-color:yellow;\"><b>$1</b></font>" , $text );
            }
            $this->output_text = $text;
        }
    }

如果 $ text =“Khalil,M.,Paas,F.,Johnson,TE,Su,YK和Payer,AF(2008)。使用横截面对相关CT和MR图像中的解剖结构识别的教学策略的影响。 <i>解剖科学教育,1(2)</i>,75-83“

已包含HTML标记,而我的一些搜索关键字

$ words =“效果颜色”

第一个外观将使用<font style="background-color:yellow">效果</font>突出显示效果一词,但第二个循环将突出显示HTML标记中的单词颜色。我该怎么办?

是否可以告诉preg_replace只在不在鳄鱼支架内时突出显示文字?

4 个答案:

答案 0 :(得分:2)

使用HTML parser确保您只搜索文字。

答案 1 :(得分:0)

您可以使用CSS突出显示的类,然后使用span标记,例如

<span class="highlighted">word</span>

然后在CSS中定义突出显示的类。然后,您可以排除“突出显示”一词在搜索中有效。当然,将课程重命名为隐藏的东西会有所帮助。

这样做的好处是可以让您以后轻松更改高亮颜色,或者确实允许用户通过修改CSS来打开和关闭它。

答案 2 :(得分:0)

为什么要使用循环?

    function __construct($text, $words) 
    { 
        $split_words = preg_replace("\s+", "|", $words); 
        $this->output_text = preg_replace("/($split_words)/i" , 
         "<font style=\"background-color:yellow; font-weight:bold;\">$1</font>" , $text ); 
    } 

答案 3 :(得分:0)

可能的解决方法是首先用字符包装它,这将(不到99%)不是搜索输入,并在'foreach'循环后用html标签替换这些字符:

class highlight
{
    public $output_text;

    function __construct($text, $words)
    {
        $split_words = explode(" ", $words);
        foreach ($split_words as $word)
        {
            $text = preg_replace("|($word)|Ui", "%$1~", $text);
        }

        $text = str_replace("~", "</b></span>", str_replace("%", "<span style='background-color:yellow;'><b>", $text));
        $this->output_text = $text;
    }
}