<?php
var_dump(preg_replace('/[^[:print:]]/u', 'x', "你"));
似乎某些旧版本的php正在返回“x”。这似乎是不正确的行为。我试着看看这个行为是否在网上某处记录,但找不到它。
答案 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模式下相同的字符。
这看起来是修复测试用例的更改。