带有unicode的PHP preg_replace_callback

时间:2012-03-29 21:19:30

标签: php preg-replace-callback

我在下面写了一个简单的脚本来模拟我的问题。 我的字符串和模式都包含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';
}
?>

2 个答案:

答案 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/