2010-03-11 73 views
1

我工作的一個簡單的搜索引擎爲報紙應用程序。當用戶鍵入關鍵字時,會顯示結果頁面,用顏色突出顯示該術語。PHP:搜索般的字突出

目前我在做這個:

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

大,str_ireplace()使得大小寫不敏感的,但是當情況不匹配的說明(即用戶尋找「錢」和記說 「錢」),發生這種情況:

 
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 [...] 

筆記的原標題是 「馬爾維納斯:阿根廷弗吉尼亞州一拉ONUŸ倫敦SE enfurece」(不是 「馬爾維納斯羣島」 等)

如何在不更改原始單詞的CaSe的情況下進行高亮顯示?

回答

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 
+0

這完美地工作。非常感謝! – 2010-03-11 03:10:42

1

你應該使用backreferences,具有不區分大小寫的修改。當你替換單詞這樣的話,你用自身替換它(保持它的情況下),而不是與任何已在搜索中使用的外殼,該外殼替換它。

使用此方法與preg_replace將允許傳遞在搜索項的陣列,並且對於每個通用置換圖案。