我们有一个问题,一个函数根据我们正在运行的服务器提供不同的结果。
职能如下:
<?php
$s='校';
preg_match_all( '/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $s, $matches );结果因环境而异:
WAMP (php 5.5.12 PCRE 8.34)和
LAMP (php5.3.3PCRE7.8)环境都给出了相同的结果
array (size=3)
0 =>
array (size=1)
0 => string '校' (length=3)
1 =>
array (size=1)
0 => string '' (length=0)
2 =>
array (size=1)
0 => string '' (length=0)WS2008 IIS7 (php 5.4.24 PCRE 8.32)
array(3) {
[0]=> array(2) {
[0]=> string(1) "�"
[1]=> string(1) "�"
}
[1]=> array(2) {
[0]=> string(0) ""
[1]=> string(0) ""
}
[2]=> array(2) {
[0]=> string(0) ""
[1]=> string(0) ""
}
}现在,真正奇怪的是,有许多不同的日语字符,结果将是正确的,在所有的环境。现在,我们唯一能复制这个问题的是这个“校”角色。无论它是伴随的(例如$s=‘校正’)还是单独的,结果在IIS上总是不同的,看起来像是编码问题'�‘。
我首先尝试查看php版本和PCRE版本,但这两个版本都是我们的LAMP上的旧版本,所以我想问题可能在其他地方.
问候
发布于 2016-02-02 08:13:39
在处理Unicode字符串时,需要传递带有模式的/u修饰符。
使用
'/".*?("|$)|((?<=[\s",+])|^)[^\s",+]+/u'.另外,您应该注意到,在单个引用的文字中,不需要在\\s中使用双反斜杠,只需使用一个反斜杠。
https://stackoverflow.com/questions/35145756
复制相似问题