不同版本PHP的PCRE在UTF8编码下的问题

发布于 2022-08-31 09:14:52 字数 587 浏览 10 评论 0

平台:
系统版本: OS X Yosemite 10.10.1
内核版本: Darwin 14.0.0

PHP代码(文件的编码是UTF-8的)

$str = '自此直至2010年n'; 
preg_match_all('/(\w+)/u', $str, $matches);
print_r($matches[0]);

PHP 5.5.14(MAC默认)
PCRE版本:PCRE Library Version 8.02 2010-03-19
输出:

Array
(
    [0] => 2010
    [1] => n
)

PHP 5.4.36(brew安装)
PCRE版本:PCRE Library Version 8.32 2012-11-30
输出:

Array
(
    [0] => 自此直至2010年n
)

请问这2个版本的差异如何避免呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风月客 2022-09-07 09:14:52

去掉 u 修饰符就好了,DEMO: http://3v4l.org/c0469

u (PCRE_UTF8)

此修正符打开一个与 perl 不兼容的附加功能。 模式字符串被认为是utf-8的. 这个修饰符 从 unix 版php 4.1.0 或更高,win32版 php 4.2.3 开始可用。 php 4.3.5 开始检查模式的 utf-8 合法性。
- 模式修饰符

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文