2012-05-17 78 views
2

我試圖驗證以UTF-8編碼並在PHP 5.3.8中運行到意外結果的一些阿拉伯文本。通過CLI運行以下片段將通過Apache返回true和false。爲什麼preg_match()代碼在PHP CLI中返回true而在Apache中爲false

var_dump(preg_match("/[[:alnum:]]/i", "عايش لهدف")); 

我有mbstring.func_overload設置爲7,我的內部編碼設置爲UTF-8。我的.htaccess文件中也有AddDefaultCharset設置爲UTF-8。

有沒有人有任何想法發生了什麼?

編輯:其實使用了5.3.8(不5.3.10)

+0

你改變在.htaccess任何'php_value'? –

+0

不會。這種情況在沒有htaccess的情況下也會出現。 –

回答

0

你可能有不同的PHP設置運行。您可以通過比較的phpinfo()的輸出在Apache中驗證這一點:

<?php phpinfo(); 

要phpinfo()函數的命令行:

$ php -i 
+0

我應該尋找哪些設置。看起來所有的mbstring設置都是一樣的。 –

0

最有可能您的CLI被設置爲一個非UTF8字符集(建議:切換到UTF8!),所以PHP得到了一些非UTF8編碼的字符串。

,使之與一個UTF8字符串的工作,使用u(UTF8)修飾符::

var_dump(preg_match("/[[:alnum:]]/iu", "عايش لهدف")); 
+0

有沒有辦法檢查這個?似乎在我的php.ini文件中,所有內容都設置爲UTF-8。 –

+0

它與PHP無關。如果您在命令行上運行代碼,它會收到一個字符串,其中包含您的終端使用的任何字符集。 – ThiefMaster

相關問題