在utf-8中的php json_encode问题

时间:2011-11-21 09:58:01

标签: php json utf-8

我在php中有以下数组

$array = array(
    array('name'=>'abc', 'text'=>'اسلسصثصض صثصهخه عه☆anton & budi☆' ),
    array('name'=>'xyz', 'text'=>'nice' ),
);

当我使用json_encode时,结果是不同的:

[
  {
    "name": "abc",
    "text": "\u0627\u0633\u0644\u0633\u0635\u062b\u0635\u0636 \u0635\u062b\u0635\u0647\u062e\u0647 \u0639\u0647\u2606anton '<&>' budi\u2606"
   },
   {
    "name": "xyz",
    "text": "nice"
  }
]

为什么结果不是这样的?

[
    {
         "name": "abc",
         "text": "اسلسصثصض صثصهخه عه☆anton &amp; budi☆"
     },
     {
         "name": "xyz",
         "text": "nice"
    }
]

由于

3 个答案:

答案 0 :(得分:1)

因为PHP在编码时不假设/允许非ASCII字符集。两种结果在解码时都是等效的。

答案 1 :(得分:1)

因为它被编码为JSON。使用您的第一个输出,您绝对100%确定浏览器将收到您想要的内容。第二个,你不能确定。

答案 2 :(得分:0)

试试这个:

//for encode
json_encode(array_map('base64_encode', $array));

//and for decode
array_map('base64_decode', json_decode($array));

希望有所帮助