1

我在下面写了一个简单的脚本来模拟我的问题。我的字符串和模式都包含 unicode 字符。

基本上,如果我从命令行(php -f test.php)运行它,它会按预期打印“匹配”。但是如果我通过网络服务器(apache,http://localhost/test.php)运行它,它会打印“不匹配”。我正在使用 PHP 5.3。

知道为什么它的行为不同吗?我如何使它通过网络服务器工作?

谢谢。

<?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';
}
?>
4

2 回答 2

1

尝试使用 iniset('default_charset','utf-8') 更改 default_charset。

如果它有效,则意味着 CLI 和 Apache PHP 配置具有单独的 php.ini 配置,并且该变量的设置可能不同,或者可能基于环境。

您可以将其保留为解决方案或找到替代方案。

干杯,

于 2012-03-29T21:24:34.317 回答
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 /

于 2012-03-29T21:28:26.257 回答