2012-05-17 44 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

相关问题