我尝试了大部分解决方案,但是所有这些问题都有同样的问题,这是我的问题。
我将此功能用于高亮搜索结果:
function highlightWords($searchtext, $searchstrings){
$searchstrings = preg_replace('/\s+/', ' ', trim($searchstrings));
$words = explode(' ', $searchstrings);
$highlighted = array();
foreach ( $words as $word ){
$highlighted[] = "<font color='#00f'><b>".$word."</b></font>";
}
return str_replace($words, $highlighted, $searchtext);
}
当我用2个或更多用空格分隔的字符串搜索文本时出现问题,而且其中任何一个字符串都包含突出显示的数组中的任何HTML代码。
例如,searchtext =&#34;我有最大的系统性能&#34; AND searchstrings =&#34; max f&#34;
在第一次迭代中,foreach会将每个 max 替换为<font color='#00f'><b>max</b></font>
在第二次迭代中,它将用<font color='#00f'><b>f</b></font>
第二次迭代也将替换第一次替换中插入的html标签!
那么它还会替换字符串<font color='#00f'>
中的 f 吗?
有什么建议吗? 谢谢 米奥德拉格
答案 0 :(得分:2)
<?php
$searchtext = "I have max system performance";
$searchstrings = "max f";
$searchstrings = preg_replace('/\s+/', ' ', trim($searchstrings));
$words = explode(' ', $searchstrings);
$highlighted = array();
foreach ( $words as $word ){
$highlighted[] = "<font color='#00f'><b>".$word."</b></font>";
}
echo strtr($searchtext, array_combine($words, $highlighted));
?>
答案 1 :(得分:0)
尝试以下
foreach ( $words as $word ){
if(strlen ($word)>2)
{
$highlighted[] = "<font color='#00f'><b>".$word."</b></font>";
}
}
答案 2 :(得分:0)
也许这对你来说是个好方法?
function highlightWords($searchtext, $searchstrings){
$searchstrings = preg_replace('/\s+/', ' ', trim($searchstrings));
$words = explode(' ', $searchstrings);
$highlighted = array();
foreach ( $words as $word ){
$highlighted[] = '<span class="highlighted-word">'.$word.'</span>';
}
return str_replace($words, $highlighted, $searchtext);
}
echo highlightWords('I have max system performance', 'max f');
?>
您需要在页面上添加一点CSS:
<style>
.highlighted-word {
font-weight: bold;
}
</style>
输出: 我有最大系统每 f ormance
<强>更新强> 如果你想高亮一点,请看看:
function highlightCompleteWords($searchtext, $searchstrings){
$searchstrings = preg_replace('/\s+/', ' ', trim($searchstrings));
$words = explode(' ', $searchstrings);
$highlighted = array();
foreach ( $words as $word ){
$searchtext = preg_replace("/\w*?".preg_quote($word)."\w*/i", "<span class='highlighted-word'>$0</span>", $searchtext);
}
return $searchtext;
}
echo highlightCompleteWords('I have max system performance', 'max f');
输出:我有最大系统效果
答案 3 :(得分:0)
我可能不完全理解您的问题,但我想您要突出显示搜索字符串中的每个匹配字词。
您可能只需执行以下操作:
$returnString = $searchtext;
foreach ( $words as $word ){
$returnString = preg_replace('/\b'.$word.'\b/i', "<font color='#00f'><b>$0</b></font>", $returnString);
}
return $returnString;
这将输出:&#34;我有最大系统性能&#34;
由于&#34; f&#34; 无法匹配
编辑 - 如果你想匹配一个单词的一部分,也是如此。
有点难看,但我相信这会为你解决
$returnString = $searchtext;
foreach ( $words as $word ){
if(strlen($word)>2){
$returnString = preg_replace('/'.$word.'/i', "§§§$0###", $returnString);
}
}
$returnString = preg_replace("/\§§§/","<font color='#00f'><b>", $returnString);
$returnString = preg_replace("/\###/","</b></font>", $returnString);
return $returnString;