情况如下:
php 5.5.11
mac osx 10.9.2、win7、centOS 6.3
代码如下:
echo preg_replace('/[\s-]+/', '-', '阿树')."\n";
测试结果如下:
Mac 乱码
windows、linux都正常
增加模式修正符后正常,如下:
echo preg_replace('/[\s-]+/u', '-', '阿树')."\n";
查找资料,是这么说的:
u(PCRE_UTF8)
此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。
请问:
1.u的意思就是将匹配的字符当作utf8吗,还有其他作用吗
2.我的代码是utf8,但是为什么只有mac(Unix)会乱码呢?
树的utf8表示是e6 a0 91。敏感的话看到这里就应该明白了。
第二个字节a0和n是一样的,从而被替换成了-,剩下左右两边的两个字节变成非法ASCII,显示成问号了,至于平台差异性,估计是所谓PCRE的问题吧,有兴趣可以钻进去查查
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。