php preg_match_仅使用特定的日语字符在IIS上显示所有不同的结果
我们有一个问题,函数根据运行它的服务器给出不同的结果 功能如下:php preg_match_仅使用特定的日语字符在IIS上显示所有不同的结果,php,regex,iis,iis-7,preg-match-all,Php,Regex,Iis,Iis 7,Preg Match All,我们有一个问题,函数根据运行它的服务器给出不同的结果 功能如下: <?php $s='校'; preg_match_all( '/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $s, $matches ); WS2008 IIS7(菲律宾比索5.4.24 PCRE 8.32) 现在,真正奇怪的是,有很多不同的日语字符,结果在所有环境下都是正确的。现在我们唯一能重现这个问题的是这个校' 性格是否随附($s=)校正' 例如)或单独使用,IIS上的结果
<?php
$s='校';
preg_match_all( '/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $s, $matches );
WS2008 IIS7(菲律宾比索5.4.24 PCRE 8.32)
现在,真正奇怪的是,有很多不同的日语字符,结果在所有环境下都是正确的。现在我们唯一能重现这个问题的是这个校' 性格是否随附($s=)校正' 例如)或单独使用,IIS上的结果总是不同的,看起来像是编码问题'�'.
我第一次尝试查看php版本和PCRE版本,但这两个版本在我们的LAMP上都是较旧的版本,所以我认为问题可能在其他地方
关于在处理Unicode字符串时,您需要通过模式传递
/u
修饰符
使用
处理Unicode字符串时,您需要传递
/u
修饰符。请尝试'/“*?(“|$)|((?确实很简单,但我没有考虑它,因为其他字符工作正常。请写一个答案,我会验证给您。
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)
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",+])|^)[^\s",+]+/u'.