首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有特定日语字符的IIS上php preg_match_all的不同结果

只有特定日语字符的IIS上php preg_match_all的不同结果
EN

Stack Overflow用户
提问于 2016-02-02 05:30:48
回答 1查看 183关注 0票数 1

我们有一个问题,一个函数根据我们正在运行的服务器提供不同的结果。

职能如下:

代码语言:javascript
复制
<?php
$s='校';
preg_match_all( '/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $s, $matches );

结果因环境而异:

WAMP (php 5.5.12 PCRE 8.34)和

LAMP (php5.3.3PCRE7.8)环境都给出了相同的结果

代码语言:javascript
复制
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)

代码语言:javascript
复制
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上的旧版本,所以我想问题可能在其他地方.

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 08:13:39

在处理Unicode字符串时,需要传递带有模式的/u修饰符。

使用

代码语言:javascript
复制
'/".*?("|$)|((?<=[\s",+])|^)[^\s",+]+/u'.

另外,您应该注意到,在单个引用的文字中,不需要在\\s中使用双反斜杠,只需使用一个反斜杠。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35145756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档