preg_replace无法正常使用UTF-8字符?

时间:2014-09-26 14:14:24

标签: php utf-8 preg-replace

我正在使用此功能替换短语中的坏词, 但除了UTF-8字符外,它适用于英文字母。

我发现\b边界与utf-8字符无法正常工作。 有没有其他方法可以做到这一点?

我必须添加'\ b',因为我只需要替换确切的单词。 例如:不想用popo_one替换p***o我只需要用popo替换p***o。希望明白这一点。

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;
}

任何想法都赞赏。

1 个答案:

答案 0 :(得分:3)

\b(单词边界)是\w字符类中的字符与其他字符或字符串限制(开始或结束)之间的限制。

默认情况下\w仅包含[a-zA-Z0-9_],但如果使用u修饰符,则\w字符类将包含所有unicode字母和数字(并且等同于{{1} })。因此,使用此修饰符,[\p{L}\p{N}_]的含义也会改变。

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

u修饰符是两个指令的组合:\b,用于更改速记字符类的含义((*UCP)\w\d ...)和\s使得模式和主题字符串被读作utf8字符串。这些指令可以直接放在模式中,而不是使用u修饰符。