zoukankan      html  css  js  c++  java
  • json_encode 中文乱码

    问题:使用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"}}}

    ["中国人","日本人","美国人"]

  • 相关阅读:
    换行的展示
    jsp页面的导出功能
    怎么设置回车键为提交功能?
    HBuilder使用心得
    js和jQuery
    前端常用技术总结--java程序员
    对压缩文件加密
    删除表中一个字段的SQL语句
    用NPOI操作EXCEL-锁定列CreateFreezePane()
    MVC 点击下载文档
  • 原文地址:https://www.cnblogs.com/brookin/p/2765370.html
Copyright © 2011-2022 走看看