2011-10-26 101 views
2

發現這個功能來突出顯示搜索字符串的關鍵詞在線程highlight multiple keywords in search突出顯示搜索多個關鍵字(非英文字符)

function highlight($text, $words) { 
    preg_match_all('~\w+~', $words, $m); 
    if(!$m) 
     return $text; 
    $re = '~\\b(' . implode('|', $m[0]) . ')\\b~i'; 
    return preg_replace($re, '<b>$0</b>', $text); 
} 

但它並不適用於非英語字符的工作,我該怎麼調整它與例如åäöô等

+0

我有完全相同的問題。我可以解決它感謝這個問題和自己[回答](http://stackoverflow.com/a/30260166/1883256)。 – Pathros

回答

0

您確定您正在查找的是unicode characters? \ w只匹配[a-zA-Z0-9_]。

例如,這符合波斯位數:

preg_match("/[^\x{06F0}-\x{06F9}\x]+/u" , '۱۲۳۴۵۶۷۸۹۰'); 

來源:http://php.net/manual/en/function.preg-match.php

只需創建與您要匹配的字符的字符類。

0

你最好用JS做的頁面加載它需要進行編碼後:

function paint_keys(str_to_replace , words){ 
temp_reg = str_to_replace; 
if(/\s/g.test(temp_reg)) temp_reg = temp_reg.split(" "); // Breaking our searching keywords into an array; 
else return words.split(temp_reg).join("<span class='painted'>" + temp_reg + "</span>"); 
for(z = 0 ; z < temp_reg.length ; z++){ 
    if(temp_reg[ z ] != "") words = words.split(temp_reg[ z ]).join("<span class='painted'>" + temp_reg[ z ] + "</span>"); 
} 
return words; 
} 

當然,你也可以更換<span class='painted'>" + temp_reg + "</span>任何你所需要的。

如果你需要它只能通過PHP完成 - 使用破壞鍵的原理explode("\s" , $words); - 這將只給你一個符號數組,然後循環替換數組中的每個單詞的字符串。