我在下面写了一个简单的脚本来模拟我的问题。 我的字符串和模式都包含unicode字符。
基本上,如果我从命令行(php -f test.php)运行它,它会打印"匹配"正如所料。 但是,如果我通过Web服务器(apache,http://localhost/test.php)运行它,它会打印" no match"。 我使用的是PHP 5.3。
知道它为什么表现不同? 如何通过Web服务器使其工作?
感谢。
<?php
function myCallback($matches) {
return $matches[0];
}
$value = 'aaa äää';
$pattern = '/(\bäää)/u';
$value = preg_replace_callback($pattern, 'myCallback', $value, -1, $count);
if ($count > 0) {
echo "match";
} else {
echo 'no match';
}
?>
答案 0 :(得分:1)
尝试使用iniset更改default_charset('default_charset','utf-8')。
如果它有效,则意味着CLI和Apache PHP配置具有单独的php.ini配置,并且可能该变量设置不同,或者可能基于环境。
您可以将其留作解决方案或找到替代方案。
干杯,
丹
答案 1 :(得分:0)
检查你的test.php是否有正确的标题。在PHP中,您应该声明:
header('Content-Type: text/html; charset=utf-8');
与HTML头一样:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
作为标准,它被设置为ISO-8895-1,可能会导致问题。在这里你可以找到关于多种编码的更多信息(如果不接受utf-8编码)和关于utf-8 self:http://devlog.info/2008/08/24/php-and-unicode-utf-8/