我使用以下函数从字符串中删除空白:
$str = preg_replace('/'s+/', '', $str);
我正在输入这串法语字符:ù û ü ÿ à â æ ç é è ê ë ï î ô
注意,每个字符之间都有一个空格。
无法识别à
字符;输出如下:ùûüÿ�âæçéèêëïîô
知道为什么吗?我之前也尝试过将str转换为UTF-8,但无济于事。
更新:我发现了以下帖子(preg_replace和中文字符的奇怪问题),其中将u
添加到正则表达式的末尾可以纠正这样的问题:
$str = preg_replace('/'s+/u', '', $str);
这似乎修复了它,但有人能解释为什么这是发生在一个官方的解决方案,解释u
在这个正则表达式做什么?
默认情况下,PHP regex引擎将您的字符串视为一组字节(即一组单个字节字符)。
当你使用u修饰符时,正则表达式引擎会改变两件事:
- 字符串被视为utf8字符串(因此字符最终被编码为多个字节)
- 简写字符类(如
's
,'w
,'d
…)的含义更改为包含unicode字符而不仅仅是ascii字符。
(*UTF8)(*UCP)yourpattern
您可以在这里找到PHP使用的pcre regex引擎的完整文档