preg_replace不适用于utf-8阿拉伯语文本

时间:2010-08-17 07:16:54

标签: php preg-replace

我编写了一个php函数来检查坏的整个单词的存在(记住整个单词而不是子字符串)并且还要突出显示给定字符串中的整个单词。

function badwordChecherAndHighLighter($str,$replace){
// $replace=1  will  Highlight
// $replace=0  will  Check the existence of any badwords

$result = mysql_query("SELECT settings_badwords_en,settings_badwords_ar FROM settings_badwords WHERE settings_badwords_status=1") or die(mysql_error());

// i dont create an array, may create overhead, so i directly apply in preg_replace

if($replace==1){
while($row = mysql_fetch_row($result))
{
//$str=preg_replace('/'.$row[0].'/i', str_repeat("*",strlen($row[0])), $str);
$str=preg_replace('/\b('.$row[0].'\b)/i',"" .$row[0] . "" , $str);
$str=preg_replace('/\b('.$row[1].'\b)/i',"" .$row[1] . "" , $str);
}
return $str;
}else{

while($row = mysql_fetch_row($result))
{
 if(preg_match('/\b('.$row[0].'\b)/i',$str)) return 1;
 if(preg_match('/\b('.$row[1].'\b)/i',$str)) return 1;
}
return 0; 
}
}

// $row[1] conatin Arabic bad Words, and $row[0] contain English bad words.

此功能在Windows操作系统,WAMP5 1.7.3上为阿拉伯语和英语提供正确的结果。

但是在Web服务器上它只适用于英语单词,而不适用于阿拉伯语。

因此,如果为此功能提供阿拉伯语文本,则无法检查是否存在任何重写词,也无法突出显示阿拉伯语单词。

我搜索并尝试了许多选项,包括\ u但没有错误,没有成功。

所以请帮忙。

1 个答案:

答案 0 :(得分:3)

\ b与utf8字符不兼容。试试这个:

preg_match('/(?<=^|[^\p{L}])' . preg_quote($utf8word,'/') . '(?=[^\p{L}]|$)/ui',$utf8string);