我编写了一个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但没有错误,没有成功。
所以请帮忙。
答案 0 :(得分:3)
\ b与utf8字符不兼容。试试这个:
preg_match('/(?<=^|[^\p{L}])' . preg_quote($utf8word,'/') . '(?=[^\p{L}]|$)/ui',$utf8string);