2012-01-18 53 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

相關問題