Heim >Backend-Entwicklung >PHP-Tutorial >不同版本PHP的PCRE在UTF8编码下的问题

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-06 20:39:471265Durchsuche

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

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

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

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

<code>Array
(
    [0] => 2010
    [1] => n
)
</code>

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

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

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

回复内容:

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

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

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

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

<code>Array
(
    [0] => 2010
    [1] => n
)
</code>

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

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

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

去掉 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 合法性。
- 模式修饰符

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn