PHP输出json数据时中文不进行unicode编码的几种方法总结

来源:互联网 发布:哪个电视直播软件最好 编辑:程序博客网 时间:2024/06/06 16:35

最近使用PHP开发APP接口时遇到一个问题,在与APP对接时,需要将从数据库或缓存中获取的数据转换成json,在做json_encode的时候,中文会被unicode编码,但是不希望中文进行编码。
json原样输出中文形式如下:

{    "code":"200",    "message":"success",    "data":[        {         "id":"1",        "content":"\u6709\u4eba@\u4f60"         }    ] }

希望结果是:

{    "code": "200",     "message": "success",     "data": [        {            "id": "70",             "content": "中文测试",         }    ]}

总结出以下几种方法:

方法一

php5.4以后使用了json_encode的JSON_UNESCAPED_UNICODE参数可以实现对字符不做escape和unicode处理
使用方法如下:

$str = "中文测试";json_encode($str,JSON_UNESCAPED_UNICODE);

但是经过测试后,发现不能对数组进行操作,如

$arr = array('id'=>'1','content1'=>'中文测试1','content2'=>'中文测试2');json_encode($arr,JSON_UNESCAPED_UNICODE);

上面这种形式似乎不起作用,故采用了第二种方法

方法二

先对需要处理的做urlencode处理,然后json_encode,最后做urldecode处理 ,使用方法如下:

/**  *  使用url_encode()对字符串进行编码 *  @param string/array $str 需要编码的数据 *  @return string/array $str 返回编码后的字符串 */  function url_encode($str) {      if(is_array($str)) {          foreach($str as $key=>$value) {              $str[urlencode($key)] = url_encode($value);          }      } else {          $str = urlencode($str);      }      return $str;  }  /*** 输出json数据,不解析中文* @param string/array $str 需要进行json编码的数据* @return string  输出json数据*/function encode_json($str) {      $result = urldecode(json_encode(url_encode($str)));      return $result; }  

折腾好久之后,发现使用json_encode()直接输出的数据能直接在APP中直接使用,需要输出的json数据在客户端开发的控制台不解析,在客户端输出后可自动解析,不过也得到了不错的经验,希望继续学习

0 0
原创粉丝点击