我正在为报纸应用程序开发一个简单的搜索引擎。当用户键入关键字时,会显示结果页面,用颜色突出显示该术语。
我目前正在这样做:
$title = str_ireplace($term, "<span class='highlight'>$term</span>", $note->Title);
很好,str_ireplace()
进行不区分大小写的搜索,但是当案例与笔记不匹配时(即用户查找“MONEY”而笔记说“钱”),就会发生这种情况:
malvinas | Resultados de la búsqueda 1. malvinas: Argentina va a la ONU y Londres se enfurece » en Actualidad [...] Naciones Unidas, Ban-Ki Moon, ante quien reiterará que se cumplan las resoluciones de la ONU sobre el tema de la soberanía de las Islas [...]
该笔记的原始标题是“Malvinas:Argentina va a la ONU y Londres se enfurece”(不是“malvinas:”等)
如何在不更改原始单词的CaSe的情况下进行突出显示?
答案 0 :(得分:2)
使用正则表达式:
$term = 'hello';
$str = 'Hello there';
$term_escaped = preg_quote($term);
$out = preg_replace("~$term_escaped~i", '<b>\0</b>', $str);
echo $out;
输出:
<b>Hello</b> there
答案 1 :(得分:1)
您应该使用backreferences,使用不区分大小写的修饰符。这样当你替换这个单词时,你将自己替换它(保持它的情况),而不是用搜索中使用的任何外壳替换它。
将此方法与preg_replace
一起使用将允许您传递搜索词的数组,并为每个搜索词传递一般的替换模式。