[[高手答疑]] 自定义JSON编码和解码函数以兼容旧版PHP

[复制链接]
查看: 64|回复: 0
发表于 2024-9-20 21:06:09 | 显示全部楼层 | 阅读模式
易博V9下载

大家可能都有接触过JSON数据,而json_encode与json_decode这两个函数是在PHP 5.0及以后的版本中引入的内置功能。如果尝试在早于PHP 5.0的环境中使用它们,可能需要安装额外的扩展。但在某些情形下,我们可能没有权限调整服务器设置,此时可以考虑编写自定义函数以模拟这两个内置函数的行为。实际上,任何系统提供的内置函数都能够通过手工编写类似功能的函数来替代。在此之前,我曾撰写过一篇关于如何手工实现json_decode功能的文章,而现在我认为也有必要提供一个json_encode的手工实现版本。为了确保函数没有重复定义,可以利用PHP中的function_exists函数来进行检查。

  1. if (!function_exists('json_encode')) {
  2. function json_encode($array = array()) {
  3. if (!is_array($array)) return null;
  4. $json = "";
  5. $i = 1;
  6. $comma = ",";
  7. $count = count($array);
  8. foreach ($array as $k => $v) {
  9. if ($i === $count) $comma = "";
  10. if (!is_array($v)) {
  11. $v = addslashes($v);
  12. $json .= '"'.$k.'":"'.$v.'"'.$comma;
  13. } else {
  14. $json .= '"'.$k.'":'.json_encode($v).$comma;
  15. }
  16. $i++;
  17. }
  18. $json = '{'.$json.'}';
  19. return $json;
  20. }
  21. }
  22. if (!function_exists('json_decode')) {
  23. function json_decode($json, $assoc = true) {
  24. $comment = false;
  25. $out = '$x=';
  26. $json = preg_replace('/:([^"}]+?)([,|}])/i', ':"\1"\2', $json);
  27. for ($i = 0; $i < strlen($json); $i++) {
  28. if (!$comment) {
  29. if (($json[$i] == '{') || ($json[$i] == '[')) {
  30. $out .= 'array(';
  31. } elseif (($json[$i] == '}') || ($json[$i] == ']')) {
  32. $out .= ')';
  33. } elseif ($json[$i] == ':') {
  34. $out .= '=>';
  35. } elseif ($json[$i] == ',') {
  36. $out .= ',';
  37. } elseif ($json[$i] == '"') {
  38. $out .= '"';
  39. }
  40. } else {
  41. $out .= $json[$i] == '?' ? '\\' : $json[$i];
  42. }
  43. if ($json[$i] === '"' && $json[$i - 1] !== '\\') {
  44. $comment = !$comment;
  45. }
  46. }
  47. eval($out . ';');
  48. return $x;
  49. }
  50. }
复制代码
易博软件介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表