我正在使用以下函数从字符串中删除空格:
$str = preg_replace('/\s+/', '', $str);
我正在输入这个法语字符串:ù û ü ÿ à â æ ç é è ê ë ï î ô
通知每个都有一个空格。
无法识别à
字符;这是输出的外观:ùûüÿ�âæçéèêëïîô
知道为什么吗?我曾尝试将str转换为UTF-8,但无济于事。
更新:我发现以下帖子(Weird problem with preg_replace and chinese character),其中在正则表达式末尾添加u
可以纠正问题,如下所示:
$str = preg_replace('/\s+/u', '', $str);
这似乎解决了这个问题,但是有人可以解释为什么会发生这种情况以及解释u
在这个正则表达式中正在做什么的官方解决方案吗?
答案 0 :(得分:4)
默认情况下,PHP正则表达式引擎会将您的字符串视为一个字节(即一个字节字符)。
使用u修饰符时,正则表达式引擎会改变两件事:
\s
,\w
,\d
...)的含义更改为包含unicode字符,而不仅包含ascii字符。请注意,这两个更改也可以在模式的开头显式编写,而不是使用u修饰符:
(*UTF8)(*UCP)yourpattern
您可以找到PHP here使用的pcre正则表达式引擎的完整文档。