【问题标题】:PHP preg_replace_callback with unicodePHP preg_replace_callback 与 unicode
【发布时间】:2012-03-29 21:19:30
【问题描述】:

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

【问题讨论】:

  • 您是否将标头发送到服务器?
  • 无标题。我手动将 url 输入到浏览器地址栏。该字符串不是用户输入的,它是在 php 脚本中硬编码的。

标签: php preg-replace-callback


【解决方案1】:

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

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

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

干杯,

【讨论】:

  • 添加 init_set 没有帮助。我很确定他们使用的是相同的 php.ini。
【解决方案2】:

检查您的 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/

【讨论】:

  • 输入字符串不是来自用户,而是在php中硬编码。而且我没有在浏览器中显示任何 unicode。所以我不确定为什么它与标题有关。但在我的回复中,是的,它确实将内容类型字符集设置为“utf-8”。
  • 我不知道,然后试试mb_internal_encoding
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
相关资源
最近更新 更多