问题:使用json_encode可以方便地将对象进行json编码,但是如果对象或数组中存在中文,中文将会被转成null,json_encode会将中文转换为unicode编码
例如:'嘎'经过json_encode处理后变为'null',最终json中文部分被替换null。如何将对象转换为json并保证对象内部的中文在json中仍然是正常的中文出现,使用json_encode是不能达到目的的。
解决方法:
先将中文字段进行url编码(urlencode),然后对对象进行json_encode编码(json_encode),最后对json字符串url解码(urldecode),即最终的json里面的中文正常展示。
<?php /** * 解决json_encode不支持中文问题 * * @Package * @Copyright (c) 1998-2012 All Rights Reserved * @Author * @Version $Id$ */ /** * 对变量或者数据进行urlencode编码,使得在进行json_encode的时候进行编码的不是中文,防止json_encode失败 * @access private * @param $var * @return array */ function var_urlencode($var) { if (empty ( $var )) { return false; } if (is_array ( $var )) { foreach ( $var as $k => $v ) { if (is_scalar ( $v )) { $var [$k] = urlencode ( $v ); } else { $var [$k] = var_urlencode ( $v ); } } } else { $var = urlencode ( $var ); } return $var; } /** * 对编码后的变量进行json_encode,json_encode不支持中文的问题 * @access public * @param $var * @return string */ function var_json_encode($var) { $_var = var_urlencode($var); $_str = json_encode($_var); return urldecode($_str); } /*Test*/ $array = array ( 'name' => '路人甲', 'age' => '13', 'profile' => array ( 'uid' => 12, 'uname' => 'lili', 'school' => '中学', 'info' => array ( 'hometown' => '亚洲', 'fond' => '苹果', 'tool' => 'bike', ), ), ); $json_str = var_json_encode($array); echo $json_str; $var = array("中国人", "日本人", "美国人"); echo var_json_encode($var);
输出:
{"name":"路人甲","age":"13","profile":{"uid":"12","uname":"lili","school":"中学","info":{"hometown":"亚洲","fond":"苹果","tool":"bike"}}}
["中国人","日本人","美国人"]