搜索结果的摘要还是正文前几十个字,关键词在摘录里根本看不到,也没有任何标记,用户点进去才发现不对。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

$pos = mb_stripos($text, $kw);
$snip = mb_substr($text, max(0, $pos - 40), 120);
$re = '/(' . preg_quote($kw, '/') . ')/iu';
$s = esc_html($snip);
echo preg_replace($re, '<mark>$1</mark>', $s);

模板直接输出 post_excerpt,没有按搜索词截取上下文,高亮替换前又少了转义这一步,结果要么没高亮要么页面结构乱,还会出现半截标签。这一点先确认清楚,后面就不用反复试。

「搜索结果高亮」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,按关键词第一次出现的位置,向前后各截取一段文字;先对片段做转义,再把关键词包上高亮用的标记;只处理纯文本片段,避免替换时破坏原有的标签。

改完照着核一遍,摘要里能看到关键词并带高亮,原有标签结构和排版都没有被破坏。

作者 9823189