Php 突出显示搜索中的多个关键字(非英语字符)

Php 突出显示搜索中的多个关键字(非英语字符),php,preg-replace,Php,Preg Replace,找到此函数以突出显示线程中搜索字符串中的关键字 函数突出显示($text,$words){ preg_match_all(“~\w+~”,$words,$m); 如果(!$m) 返回$text; $re='~\\b('.内爆('|',$m[0])。\\b~i'; 返回preg_replace($re,$0',$text); } 但它不适用于非英语字符,我如何调整它以适用于例如åäöô等。您确定要搜索unicode字符吗\w仅匹配[a-zA-Z0-9] 例如,这与波斯数字匹配: preg_mat

找到此函数以突出显示线程中搜索字符串中的关键字

函数突出显示($text,$words){
preg_match_all(“~\w+~”,$words,$m);
如果(!$m)
返回$text;
$re='~\\b('.内爆('|',$m[0])。\\b~i';
返回preg_replace($re,$0',$text);
}

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

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

例如,这与波斯数字匹配:

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


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

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

例如,这与波斯数字匹配:

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


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

在页面加载所需编码后,最好使用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;
}
函数绘制键(str-to-replace,words){
temp_reg=str_替换;
如果(/\s/g.test(temp_reg))temp_reg=temp_reg.split(“”;//将搜索关键字拆分为一个数组;
else返回words.split(temp_reg).join(“+temp_reg+”);
对于(z=0;z
当然,您可以根据需要更换
“+temp_reg+”


如果您只需要通过php完成,请使用以下原则:按
explode(“\s”,$words”)断开数组的键-这将仅为您提供一个符号数组,然后循环替换数组中每个单词的字符串

页面加载所需编码后,最好使用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;
}
函数绘制键(str-to-replace,words){
temp_reg=str_替换;
如果(/\s/g.test(temp_reg))temp_reg=temp_reg.split(“”;//将搜索关键字拆分为一个数组;
else返回words.split(temp_reg).join(“+temp_reg+”);
对于(z=0;z
当然,您可以根据需要更换
“+temp_reg+”


如果您只需要通过php完成,请使用以下原则:按
explode(“\s”,$words”)断开数组的键-这将仅为您提供一个符号数组,然后循环替换数组中每个单词的字符串

我也有同样的问题。多亏了这个问题和我自己的问题,我才能解决它。我也遇到了完全相同的问题。多亏了这个问题和我自己,我才能解决它。