簡體   English   中英

突出顯示搜索中的多個關鍵字(非英語字符)

[英]Highlight multiple keywords in search (non-english characters)

找到了此功能以在線程中突出顯示搜索字符串中的關鍵字

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);
}

但是它不適用於非英語字符,我如何調整它使其與åäöô等兼容。

您確定要搜索Unicode字符嗎? \\ w僅匹配[a-zA-Z0-9_]。

例如,這匹配波斯數字:

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

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

只需使用要匹配的字符創建一個字符類。

頁面加載所需的編碼后,最好使用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 );破壞鍵來排列數組的原理explode( "\\s" , $words ); -這只會為您提供一個符號數組,然后循環為該數組中的每個單詞替換字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM