带西里尔字符的preg_replace
我想用null替换这些字符[^ a-zа-з0-9_],但是当它的多字节字符串时我不能这样做。带西里尔字符的preg_replace
我试过用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),就应更换它们。
只要您的输入字符串是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为正则表达式。
那么,对我来说这是行不通的。如果¸-з(西里尔字符)在$ data中,则返回值为NULL; –
在我的浏览器中有三个字符(代码点)。你是指人物范围还是特定人物?你可以提供你遇到问题的人物的Unicode编号吗? – hakre
嗯,没有你修改器的作品,很奇怪。 /[\ W] + /完美 –
'a-з'看起来有点奇怪。是西里尔文的“a”而不是常规的ascii'a'?如果是ascii,那么你在这里指定了一个heckuva范围的字符。 –
其西里尔字母a。 –