我想用null替换这些字符[^ a-zа-з0-9_],但是当它的多字节字符串时我不能这样做。
我尝试使用mb_ *,iconv,PCRE,mb_eregi_replace和u修饰符(对于PCRE),但没有一个能够很好地工作。
mb_eregi_replace可以工作,但只输出正确的utf8字符串,但是当preg_replace使用相同的正则表达式时,它不会替换字符。
这是我的代码,它与unicode一起使用,但它不会替换文本。
function _data($data)
{
mb_regex_encoding('UTF-8');
return mb_eregi_replace('/[^a-zа-з0-9_]+/', '', $data);
}
var_dump(namespace\_data('Текст Removethis- and this _#$)( and also this $*@&$'));
结果是特殊字符(#_ $ ..)应该替换它们,如果我将函数更改为preg_replace(并且没有unicode),它应该替换它们。
答案 0 :(得分:10)
只要您的输入字符串是UTF-8编码(如果没有,将其重新编码为UTF-8),如果您使用正确的正则表达式,则可以安全地使用preg_replace
。
function _data($data)
{
return preg_replace('/[^\w_]+/u', '', $data);
}
var_dump(namespace\_data('Текст Removethis- and this _#$)( and also this $*@&$'));
\w
=任何单词字符u
(在结束时)=为正则表达式启用UTF-8。