json_encode不支持中文的一个解决方法
2015-11-06 09:35
543 查看
<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>
相关文章推荐
- js遍历 子节点 子元素
- js基础知识(公有方法、私有方法、特权方法)
- JS实现的N多简单无缝滚动代码(包含图文效果)
- javascript中的altKey 和 Event属性大全
- JSP引用JS时的问题
- datagrid使用本地加载的方式将js得到的json传递到jsp
- js从数组中删除指定值(不是指定位置)的元素
- Table打印 根据高度自动分页
- js中回调函数的学习笔记
- Extjs动态显示列/隐藏列
- Google Pagespeed,自动压缩优化JS/CSS/Image
- Head First Servlet&Jsp 学习笔记(一) 一些基础知识
- javascript变量声明提升(hoisting)
- javascript中的altKey 和 Event属性大全
- JS实现的N多简单无缝滚动代码(包含图文效果)
- js基础知识(公有方法、私有方法、特权方法)
- JS实现的自定义网页拖动类
- JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
- javascript如何实现暂停功能
- 详解javascript中的事件处理