2012-01-18 22 views
2

以下命令在PHP5.3.8 Lamp(Ubuntu 11.04)服务器上返回true,但在PHP5.3.2 Lamp(Ubuntu 10.04.2 LTS)服务器上返回false。带Umlaute UTF-8修饰符的PHP5.3 preg_match

<?php echo preg_match('/\w/u', 'ß'); ?> 

我几乎改变了php.ini文件中的所有设置,但没有成功。 我将系统语言环境更改为en_US.UTF-8,并将其设置为PHP的默认语言环境。另外我尝试了de_DE.UTF-8-locale。

在这两种情况下,我都使用ubuntu提供的默认包。

有没有人有另一个想法,改变什么,没有编译任何包,以便PHP5.3.2也将返回true?

回答

6

PHP 5.3.2 uses PCRE 8.00 while PHP 5.3.8 uses PCRE 8.11.一个change in PCRE 8.10是增加了PCRE_UCP option的:

PCRE_UCP

此选项更改PCRE处理\B的方式,\b\D\d\S\s\W\w和一些POSIX字符类。默认情况下,只识别ASCII 字符,但如果设置了PCRE_UCP,则会使用Unicode属性 来代替字符分类。有关pcrepattern页面中通用字符类型的 部分提供了更多详细信息。如果您设置了 PCRE_UCP,则与其影响的其中一个项目匹配需要更长的时间。 选项仅在PCRE已使用Unicode属性支持进行编译时才可用。

不幸的是,您无法直接在PHP中使用模式修饰符来触发此选项。它将由uPCRE_UTF8(PHP 5.3.4和更高版本)一起设置。

+0

谢谢你这么多。 – 2012-01-19 17:20:15

相关问题