我想通过在发送输出之前处理输出来对搜索的单词进行服务器端突出显示。
“服务器端”背后的原因是:
1) Unicode 文本的 Javascript 突出显示很糟糕。2) \b 不能使用 unicode(至少在 JS、AFAIK 中)。3) JS 中没有后向支持。
我正在使用下面的函数,但昨晚意识到为跳过 <...> 而编写的第一部分不起作用。
public function ss_highlight($terms, $buf)
{
if (empty($terms)) {
return $buf;;
}
/* sort before using length for better match */
usort($terms, function($a, $b) {
return mb_strlen($b) - mb_strlen($a);
});
$str_terms = implode('|', $terms);
/* server side highlighter */
$buf = preg_replace('/(<[^>]+>)*(?<=[\s|:|\-|>|\(|\)|\.|,|\/|^])('.$str_terms.')(?=[\s|:|\-|<|\(|\)|\.|,|\/]|$)/i', '$1<span class="highlight">$2</span>', $buf);
return $buf;
}
任何想法,将不胜感激。
问候。
PS:我在替换所有出现的未包含在 OPEN 和 CLOSE 中的特定单词中看到了一些类似的东西?但无法弄清楚如何满足我的要求。