我正在使用此课程突出显示一段文字上的搜索关键字:
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只在不在鳄鱼支架内时突出显示文字?
答案 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;
}
}