<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>