PHP中调用json_encode()函数

 如果你调用 PHP自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如:
echo json_encode(array('你好'));
// 输出: ["\u4f60\u597d"]

    这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是”Any UNICODEcharacter”.

    如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0 版本之前),你只能换一个新的 JSON 库. 为了简单, 我简单写了几十行代码, 实现一个 json_encode().

class Util
{
    staticfunction json_encode($input){
       // 从 PHP 5.4.0 起, 增加了这个选项.
       if(defined('JSON_D_UNICODE)'){
           return json_encode($input, JSON_D_UNICODE);
       }
       if(is_string($input)){
           $text = $input;
           $text = str_replace('\\', '\\\\', $text);
           $text = str_replace(
               array("\r", "\n", "\t", """),
               array('\r', '\n', '\t', '\"'),
               $text);
           return '"' . $text . '"';
       }else if(is_array($input) || is_object($input)){
           $arr = array();
           $is_obj = is_object($input) || (array_keys($input) !== range(0,count($input) - 1));
           foreach($input as $k=>$v){
               if($is_obj){
                   $arr[] = self::json_encode($k) . ':' . self::json_encode($v);
               }else{
                   $arr[] = self::json_encode($v);
       

你可能感兴趣的:(PHP)