我使用这个函数来替换短语中的坏单词,但除了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修饰符。