在搜索中突出显示多个关键字(非英文字符)

发布于 2024-12-12 09:00:30 字数 437 浏览 1 评论 0原文

发现此函数可以突出显示线程中搜索字符串中的关键字 突出显示搜索中的多个关键字

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

但它不适用于非英语字符,我如何调整它以使用例如 å ä ö ô 等。

Found this function to highlight keywords in a search string in the thread 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);
}

But it does not work for non-english characters, how can I tweak it to work with e.g. å ä ö ô etc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

流绪微梦 2024-12-19 09:00:31

你最好在页面加载所需的编码后使用 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;
}

当然,你可以将 " + temp_reg + " 替换为无论你需要什么。

如果您需要仅由 php 完成 - 使用通过 explode( "\s" , $words ); 打破数组键的原则 - 这只会给您一个符号数组然后循环替换数组中每个单词的字符串。

You better do it with JS after the page loads it with needed encoding:

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

Of course, you can replace the <span class='painted'>" + temp_reg + "</span> to whatever you need.

If you need it to be done by php only - use the principle of breaking the keys to array by explode( "\s" , $words ); - that will give you an array of symbols only and then loop to replace the string for each word in the array.

注定孤独终老 2024-12-19 09:00:30

您确定要搜索 unicode 字符吗? \w 仅匹配 [a-zA-Z0-9_]。

例如,这匹配波斯数字:

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

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

只需使用要匹配的字符创建一个字符类即可。

Are you sure you are searching for unicode characters? \w Only matches [a-zA-Z0-9_].

For example this matches persian digits :

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

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

Just create a character class with the characters you want to match.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文