echo urldecode ( json_encode($test, JSON_FORCE_OBJECT) ); 
添加urldecode 就ok了

解决方案 »

  1.   

    那不是乱码,中文字符json_encode 之后是那样的。
      

  2.   

    \u 可不是乱码,人家是为了防止乱码转了unicode码而已
      

  3.   

    那个不是乱码,是union码。
    如果要正常显示中文,可以参考:http://blog.csdn.net/fdipzone/article/details/28766357
      

  4.   

    json_encode 是编码函数,产生的自然是编码后结果
    其中出现一些你不能识别的成分,不也是很正常的吗?
    $s = "中文名称";
    echo urlencode($s); //%E4%B8%AD%E6%96%87%E5%90%8D%E7%A7%B0
    echo base64_encode($s); //5Lit5paH5ZCN56ew既然你能接受这些编码的结果,那又为何不能接受
    echo json_encode($s); //"\u4e2d\u6587\u540d\u79f0"
    这样的结果呢?至于为什么要用 unicode 十六进制内码 表示,个人认为是 php 的败笔
    1、由于要取得 unicode 内码,所以就有传入数据的字符集识别问题。正因为他不能识别字符集,所以 json 函数只适用于 utf-8
    2、传递到浏览器的任何字符集的文字,都会被浏览器统一转换为 unicode 编码,所以 json_encode 所做的编码转换是没有意义的。浏览器依然要有将十六进制串转换成 unicode 内码的动作