为什么某些版本的php似乎将unicode视为不可打印的

时间:2016-02-29 20:09:39

标签: php regex unicode

我在https://3v4l.org/bUqlj

的3v4l.org上运行了以下代码示例
<?php

var_dump(preg_replace('/[^[:print:]]/u', 'x', "你"));

似乎某些旧版本的php正在返回“x”。这似乎是不正确的行为。我试着看看这个行为是否在网上某处记录,但找不到它。

1 个答案:

答案 0 :(得分:1)

这似乎是PCRE问题的结果。 3V4L上的输出显示v5.4.4之后的v5.4系列以及v5.5.10之后的v5.5系列开始工作。

现在,查看PHP更改日志:

因此,远离PCRE v8.32的升级解决了这个问题(请注意v5.6系列在v5.6.0中以PCRE v8.34开始)。查看PCRE changelog,我们会在Version 8.34 15-December-2013部分的第31项

下看到
  

在设置PCRE_UCP时升级POSIX类[:graph:],[:print:]和[:punct:]的处理,以包含与Perl在Unicode模式下相同的字符。

这看起来是修复测试用例的更改。