为什么这个 preg_match() 代码在 PHP CLI 中返回 true,而在 Apache 中返回 false


Why is this preg_match() code returning true in PHP CLI and false in Apache

我正在尝试验证一些以 UTF-8 编码的阿拉伯语文本,并在 PHP 5.3.8 中遇到意外结果。通过 CLI 运行以下代码片段通过 Apache 返回 true 和 false。

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

我mbstring.func_overload设置为 7,内部编码设置为 UTF-8。我还在我的.htaccess文件中将AddDefaultCharset设置为UTF-8。

有人知道发生了什么吗?

编辑:实际上使用的是5.3.8(不是5.3.10(

您可能正在使用不同的 PHP 设置运行。你可以通过比较 Apache 中 phpinfo(( 的输出来验证这一点:

<?php phpinfo();

从命令行到 phpinfo((:

$ php -i

很可能你的CLI被设置为非utf8字符集(建议:切换到UTF8!(,所以PHP得到了一些非utf8编码的字符串。

要使其适用于 UTF8 字符串,请使用 u (utf8( 修饰符:

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