为什么php-json模块会破坏我的utf-8字符串?

时间:2012-01-18 17:39:22

标签: php json unicode utf-8

为什么这样:

<?
var_dump ( json_decode('{"unicode":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8"}') );
?>

告诉我:

object(stdClass)#1 (1) {
  ["unicode"]=>
  string(18) "ãã¬ã¹ã­ãã"
}

根据文件说它应该是“プレスキット”

在一台运行PHP 5.1.6的计算机上,根据http://www.aurore.net/projects/php-json/上的说明和运行PHP 5.2.11的计算机安装了此模块,这种情况发生在我身上

2 个答案:

答案 0 :(得分:1)

你必须输出一个UTF-8字符集标题,或者你的浏览器可以自由地解释它想要的原始json字符串,例如:而是ISO-8859。

答案 1 :(得分:0)

您需要让浏览器知道在输出实际JSON之前通过发送HTTP标头将数据解释为UTF-8,如下所示:

  

header('Content-Type:application / json; charset = utf-8');

请注意,必须在任何其他输出之前发送标头。您应该阅读HTTP规范并了解如何使用标头。这是a link to get you started,用PHP发送HTTP头。


<强>更新

在这样的实例中,发送了正确的标头,确保测试机器上的区域设置允许UTF-8字符非常重要。如果系统上的默认语言环境不支持UTF-8,并且您没有安装,那么您将永远看不到正确的输出。您可以阅读a little more about this here