代码之家  ›  专栏  ›  技术社区  ›  Jose Vega

突出显示文本中的搜索关键字

php
  •  1
  • Jose Vega  · 技术社区  · 14 年前

    我正在使用这个类突出显示一段文本上的搜索关键字:

        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,T.E.、Su,Y.K.和Payer,A.F.(2008年)。使用横截面的教学策略对相关CT和MR图像中解剖结构识别的影响。 <i> 解剖学教育,1(2) </i> 75-83英寸

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

    $words=“效果颜色”

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

    是否可以告诉preg_replace仅在文本不在鳄鱼括号内时突出显示文本?

    4 回复  |  直到 13 年前
        1
  •  2
  •   Ignacio Vazquez-Abrams    14 年前

    使用A HTML parser 确保只搜索文本。

        2
  •  0
  •   a'r    14 年前

    您可以使用CSS高亮显示的类,然后使用跨距标记,例如。

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

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

    这样做的好处还在于,您可以在将来轻松地更改突出显示颜色,或者允许用户通过修改CSS来打开和关闭突出显示颜色。

        3
  •  0
  •   Paulo Santos    14 年前

    为什么使用循环?

        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 ); 
        } 
    
        4
  •  0
  •   LPL user462990    13 年前

    一个可能的解决方法是首先用字符包装它,而不是搜索输入,并在“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;
        }
    }