json_encode不支持中文的一个解决方法

<pre name="code" class="plain"><blockquote style="border: 0px; font-family: Georgia, 'Bitstream Charter', serif; font-size: 15px; font-style: italic; margin: 0px 3em; outline: 0px; padding: 0px; vertical-align: baseline; quotes: ''; color: rgb(55, 55, 55); line-height: 24px;"><p style="border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; margin-top: 0px; margin-bottom: 1.625em; outline: 0px; padding-top: 0px; padding-bottom: 0px; vertical-align: baseline;">由于编码是GBK的原因,UTF-8编码就可以正常json_encode了</p></blockquote><p style="border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; margin-top: 0px; margin-bottom: 1.625em; outline: 0px; padding-top: 0px; padding-bottom: 0px; vertical-align: baseline; color: rgb(55, 55, 55); line-height: 24px;">今天头一回用json_encode,发现它不支持中文,数组中所有中文在json_encode之后都不见了,Google了一下,感觉那些解决方法都不太方便,自己研究了一下,想出一个相对比较简单的方法:</p><p style="border: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; margin-top: 0px; margin-bottom: 1.625em; outline: 0px; padding-top: 0px; padding-bottom: 0px; vertical-align: baseline; color: rgb(55, 55, 55); line-height: 24px;">在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。</p>

<span style="font-size:18px;"><?php
/**************************************************************
 *
 * 使用特定function对数组中所有元素做处理
 * @param string &$array  要处理的字符串
 * @param string $function 要执行的函数
 * @return boolean $apply_to_keys_also  是否也应用到key上
 * @access public
 *
 *************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
 
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}

/**************************************************************
 *
 * 将数组转换为JSON字符串(兼容中文)
 * @param array $array  要转换的数组
 * @return string  转换得到的json字符串
 * @access public
 *
 *************************************************************/
function JSON($array) {
 arrayRecursive($array, 'urlencode', true);
 $json = json_encode($array);
 return urldecode($json);
}


$arr = array (
  array (
	  'id' => '0',
	  'name' => '我的姓名',
	  'title' => '解决json解析'
	),

	array (
	  'id' => '1',
	  'name' => '我的姓名',
	  'title' => '解决json解析'
	)
);
echo JSON($arr);
?></span>



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值