1

我正在为报纸应用程序开发一个简单的搜索引擎。当用户键入关键字时,会显示一个结果页面,并用颜色突出显示该术语。

我目前正在这样做:

$title = str_ireplace($term, "<span class='highlight'>$term</span>", $note->Title);

很好,str_ireplace()进行不区分大小写的搜索,但是当大小写与注释不匹配时(即用户查找“MONEY”并且注释显示“money”),会发生这种情况:

马尔维纳斯 | 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íade las Islas [...]

笔记的原标题是“马尔维纳斯:阿根廷 va a la ONU y Londres se enfurece”(不是“马尔维纳斯:”等)

如何在不更改原始单词的 CaSe 的情况下进行突出显示?

4

2 回答 2

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
于 2010-03-11T03:04:43.200 回答
1

您应该使用带有不区分大小写修饰符的反向引用。这样,当您替换单词时,您将用它自己替换它(保持它的大小写),而不是用搜索中使用的任何大小写替换它。

使用此方法preg_replace将允许您传入一组搜索词,以及每个搜索词的通用替换模式。

于 2010-03-11T03:00:18.827 回答