json_encode在ajax应用的开发里是必不可少的一个函数,但是json_encode的使用条件是比较苛刻的,需要在php 5.2.0以上并且需要PECL json在1.2.0以上才可以使用。

其实json_encode的替代方法在网上有很多,这里提供一个在php在线手册里看到的一个简单的函数,已经通过测试。

function jsonEncode($var) {if (function_exists('json_encode')) {return json_encode($var);} else {switch (gettype($var)) {case 'boolean':return $var ? 'true' : 'false'; // Lowercase necessary!case 'integer':case 'double':return $var;case 'resource':case 'string':return '"'. str_replace(array("\r", "\n", "<", ">", "&"),array('\r', '\n', '\x3c', '\x3e', '\x26'),addslashes($var)) .'"';case 'array':// Arrays in JSON can't be associative. If the array is empty or if it// has sequential whole number keys starting with 0, it's not associative// so we can go ahead and convert it as an array.if (empty ($var) || array_keys($var) === range(0, sizeof($var) - 1)) {$output = array();foreach ($var as $v) {$output[] = jsonEncode($v);}return '[ '. implode(', ', $output) .' ]';}// Otherwise, fall through to convert the array as an object.case 'object':$output = array();foreach ($var as $k => $v) {$output[] = jsonEncode(strval($k)) .': '. jsonEncode($v);}return '{ '. implode(', ', $output) .' }';default:return 'null';}}
}echo jsonEncode(array('first'=>'testing','second'=>'tangjili'));

或者用下面:

<?phpfunction php_json_encode( $data ) {if( is_array($data) || is_object($data) ) {$islist = is_array($data) && ( empty($data) || array_keys($data) === range(0,count($data)-1) );if( $islist ) $json = '[' . implode(',', array_map('php_json_encode', $data) ) . ']';else {$items = Array();foreach( $data as $key => $value ) $items[] = php_json_encode("$key") . ':' . php_json_encode($value);$json = '{' . implode(',', $items) . '}';}} elseif( is_string($data) ) {$string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"';$json    = '';$len    = strlen($string);for( $i = 0; $i < $len; $i++ ) {$char = $string[$i];$c1 = ord($char);if( $c1 <128 ) { $json .= ($c1 > 31) ? $char : sprintf("\\u%04x", $c1); continue; }$c2 = ord($string[++$i]);if ( ($c1 & 32) === 0 ) { $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128); continue; }$c3 = ord($string[++$i]);if( ($c1 & 16) === 0 ) { $json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) << 6) + ($c3 - 128)); continue; }$c4 = ord($string[++$i]);if( ($c1 & 8 ) === 0 ) {$u = (($c1 & 15) << 2) + (($c2>>4) & 3) - 1;$w1 = (54<<10) + ($u<<6) + (($c2 & 15) << 2) + (($c3>>4) & 3);$w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128);$json .= sprintf("\\u%04x\\u%04x", $w1, $w2);}}} else $json = strtolower(var_export( $data, true ));return $json;
}echo php_json_encode(array('first'=>'testing'));

如果想要现实中文可以结合下面的function

function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{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]); } }}
}

例子:

function JSON($array) {arrayRecursive($array, 'urlencode', true);$json = jsonEncode($array); // 或者 $json = php_json_encode($array);return urldecode($json);
}echo JSON(array('first'=>'testing','second'=>'中文'));

php json_encode 替代方法 (亦可显示中文)相关推荐

  1. 让搜索显示中文的方法

    如文中所说,此方法可以显示中文,显示中文的范围不限于cancel按钮和search控件 正确的处理方法: 点击工程名, 打开如下图界面 在Localizations默认只有English这一项,  我 ...

  2. wingide 显示中文 及 配色方案

    网上收集的方法: 显示中文: 任意文本编辑器打开:x:\Wing IDE\bin\gtk-bin\etc\pango\pango.aliases 修改内容为: courier = "micr ...

  3. linux命令框显示中文乱码_CentOS终端命令行显示中文乱码的解决方法

    这篇文章主要介绍了CentOS终端命令行显示中文乱码的解决方法,以及测试方法和缺少中文字体时的解决方法,需要的朋友可以参考下 安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方 ...

  4. 【原创】QT在嵌入式系统中显示中文的方法

    [原创]QT在嵌入式系统中显示中文的方法 此篇文章主要借鉴:http://zzqh007.blog.163.com/blog/static/44434847201011312168296/ 移植QT4 ...

  5. dos窗口显示中文的一种方法

    dos窗口显示中文的一种方法 dos窗口显示中文的一种方法 (2011-09-13 11:20:41)转载▼ 标签: 杂谈 中文代码页 936 UTF8 65001 CHCP 936 # 使用简体中文 ...

  6. python2.7显示中文_Python 2.7中文显示与处理方法

    在学习使用Python的过程中,一定会遇到文字输入与处理,这就不可避免的会使用中文字符.但是Python2.7默认使用的字符集是ASCII,并不支持中文字符的显示与处理,因些如果要在Python中处理 ...

  7. ajax后台返回数据中文乱码_解决Jmeter返回值显示中文乱码 的三种方法及设置随机动态参数(非原创侵删)...

    一.Jmeter返回值显示中文乱码解决方法 第一种解决方法: 1. 点击线程组--添加--后置处理器--BeanShell后置处理程序 2.点击BeanShell后置处理程序,编写:prev.setD ...

  8. python画图显示不了中文_Python使用matplotlib绘图无法显示中文问题的解决方法

    本文实例讲述了Python使用matplotlib绘图无法显示中文问题的解决方法.分享给大家供大家参考,具体如下: 在python中,默认情况下是无法显示中文的,如下代码: import matplo ...

  9. Python实现matplotlib显示中文的方法详解

    文实例讲述了Python实现matplotlib显示中文的方法.分享给大家供大家参考,具体如下: [注意] 可能与本文主题无关,不过我还是想指出来:使用matplotlib库时,下面两种导入方式是等价 ...

最新文章

  1. vue 热更新无反应_不吹不黑谈谈 vue 的 SFC 和 template
  2. 大学计算机专业和物理专业哪个难,大学里最难毕业的3大专业,尤其是最后一个...
  3. 中科大博士带头搬砖!这家上市公司其实是最隐秘的AI高手
  4. 面向.NET开发人员的Dapr——目录
  5. Linux网络故障排查命令(ifconfig、ping、telnet、netstat、lsof、nc、curl、tcpdump)
  6. tableau 自定义省份_在Tableau中使用自定义图像映射
  7. [html] 可以给内联元素设置宽和高吗?为什么?
  8. 特斯拉下一代Roadster跑车生产时间再度推迟至2023年
  9. 除去WebView默认存在的一定像素的边距问题
  10. 请投量子位一票 | 2018年度明星学术公众号评选
  11. java 程序在Eclipse 或者 Linux 运行报 Unsupported major.minor version 51.0解决办法
  12. 计算机二级office试题27答案,2017年12月计算机二级MS Office习题答案(一)
  13. 2014-08-06 小代码,大道理
  14. AngularJS——第8章 服务
  15. 51单片机之《概述》
  16. java自行车销售系统_基于 javaee 自行车租赁系统,源码分享
  17. 自制裸眼3D图【推荐】
  18. android8 avb检验,android avb(Android Verified Boot)验证
  19. js对金额数据添加最大金额单位【千、万、十万...】
  20. 使用 Ruby 开发代码生成器

热门文章

  1. 信息学奥赛一本通C++语言——1043:整数大小比较
  2. 酱油和gbt酱油哪个好_扒了超市 50 瓶酱油后,我们总结了 2 个挑酱油的好方法...
  3. excel批量更改超链接_excel超链接应用:快速生成目录的几个方法-上
  4. 学生管理系统服务器端设计,学生信息管理系统设计与实现
  5. hbase原理与实践_JAVA连接HBase客户端及HBase写入数据和读取数据原理解析
  6. PPT模板(淘宝花钱买来的,免费分享给大家)
  7. StyleGAN_LatentEditor-master(Image2StyleGAN):如何将图像嵌入到 StyleGAN 潜在空间中?代码运行过程
  8. 实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表
  9. 属性面板 脚本_如何在组态王中实现同类型设备公用操作面板的调用---干货
  10. 排序字段设计_内容搜索排序表达式的最佳实践