preg_replace不能正确使用UTF-8字符


preg_replace is not work correctly with UTF-8 chars?

我使用这个函数来替换短语中的坏单词,但除了UTF-8字符外,它还可以很好地处理英文字母。

我发现'b边界在utf-8字符下不能正常工作。有其他方法可以做到这一点吗?

我不得不添加'''b',因为我只需要替换确切的单词。例如:不想用p***o替换popo_one,我只需要用p***o替换popo。希望大家能明白。

public function wordfilter($phrase) {
    $filter = array('/popo'b/i','/blabla'b/i'); 
    $replace = array('p***o','b***a'); 
    $newphrase = preg_replace($filter, $replace, $phrase); 
return $newphrase;
}

任何想法都值得赞赏。

'b(单词边界)是'w字符类中的一个字符与另一个字符之间的限制或字符串的限制(开始或结束)。

默认情况下,'w只包含[a-zA-Z0-9_],但如果使用u修饰符,则'w字符类将包含所有unicode字母和数字(相当于['p{L}'p{N}_])。因此,有了这个修饰语,'b的含义也会发生变化。

u修饰符有第二个效果。有了它,模式和主题字符串不再被视为ascii字符串,而是被视为utf8字符串。

u修饰符是两个指令的组合:(*UCP),用于更改速记字符类('w'd's…)的含义;(*UTF8),用于将模式和主题字符串读取为utf8字符串。这些指令可以从一开始就直接放在模式中,而不是使用u修饰符。