1. <?php
  2. $arr = array
  3. (
  4. 'Name'=>'希亚',
  5. 'Age'=>
  6. );
  7.  
  8. $jsonencode = json_encode($arr);
  9. echo $jsonencode;
  10. ?>
  1. 程序运行结果如下:
  1. {"Name":null,"Age":}

json_encode 函数中中文被编码成 null 了,Google 了一下,很简单,为了与前端紧密结合,Json 只支持 utf-8 编码,我认为是前端的 Javascript 也是 utf-8 的原因。

  1. <?php
  2. $array = array
  3. (
  4. 'title'=>iconv('gb2312','utf-8','这里是中文标题'),
  5. 'body'=>'abcd...'
  6. );
  7.  
  8. echo json_encode($array);
  9. ?>

这个程序的运行结果为:

  1. {"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}

数组中所有中文在json_encode之后都不见了或者出现\u2353等。

解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。

  1. <?php
  2. /**************************************************************
  3. *
  4. * 使用特定function对数组中所有元素做处理
  5. * @param string &$array 要处理的字符串
  6. * @param string $function 要执行的函数
  7. * @return boolean $apply_to_keys_also 是否也应用到key上
  8. * @access public
  9. *
  10. *************************************************************/
  11. function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
  12. {
  13. static $recursive_counter = ;
  14. if (++$recursive_counter > ) {
  15. die('possible deep recursion attack');
  16. }
  17. foreach ($array as $key => $value) {
  18. if (is_array($value)) {
  19. arrayRecursive($array[$key], $function, $apply_to_keys_also);
  20. } else {
  21. $array[$key] = $function($value);
  22. }
  23.  
  24. if ($apply_to_keys_also && is_string($key)) {
  25. $new_key = $function($key);
  26. if ($new_key != $key) {
  27. $array[$new_key] = $array[$key];
  28. unset($array[$key]);
  29. }
  30. }
  31. }
  32. $recursive_counter--;
  33. }
  34.  
  35. /**************************************************************
  36. *
  37. * 将数组转换为JSON字符串(兼容中文)
  38. * @param array $array 要转换的数组
  39. * @return string 转换得到的json字符串
  40. * @access public
  41. *
  42. *************************************************************/
  43. function JSON($array) {
  44. arrayRecursive($array, 'urlencode', true);
  45. $json = json_encode($array);
  46. return urldecode($json);
  47. }
  48.  
  49. $array = array
  50. (
  51. 'Name'=>'希亚',
  52. 'Age'=>
  53. );
  54.  
  55. echo JSON($array);
  56. ?>

这次成功了,运行结果如下:

  1. {"Name":"希亚","Age":""}

原文链接:http://www.nowamagic.net/php/php_FunctionJsonEncode.php

PHP jsonencode 已经json中包含 汉字的处理的更多相关文章

  1. 字符串中包含汉字和\u,显示出汉字来

    针对py2,py3不需要这样.#coding=utf8import sysreload(sys)sys.setdefaultencoding('utf8') strx2='你好\u4e2d\u56fd ...

  2. 宝马-中国官方网站服务站点信息爬去记录(解析json中数据)

    具体步骤: 1.进入宝马官网,查找经销商查询界面 http://www.bmw.com.cn/cn/zh/general/dealer_locator/content/dealer_locator.h ...

  3. 处理json中的异常字符

    在很多场景中需要通过json传递数据,如果json中包含英文的",""'"之类的字符,会导致json解析失败 可以用一些在线的json格式检查网站检查是否含有异 ...

  4. python中json序列化时汉字变成编码的解决方式

    我们在使用json模块时,如果被序列化对象中不包含汉字,当然没有任何问题,但是有汉字会被编译成unicode码: import json dic = {","sex":& ...

  5. C# String.Format格式化json字符串中包含"{" "}"报错问题

    json.Append(String.Format("{\"total\":{0},\"row\":{1}}", lineCount, st ...

  6. EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字

    EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母   Dim myReg    ...

  7. Delphi判断字符串中是否包含汉字,并返回汉字位置

    //1,函数代码{判断字符串是否包含汉字// judgeStr:要判断的字符串//posInt:第一个汉字位置}function TForm2.IsHaveChinese(judgeStr: stri ...

  8. 传输json数据到前台的时候,数据中包含日期数据

    问题描述 当从数据库中查询的数据中包含有日期格式的数据的时候,数据传输到前台会报错. 解决方式 // 逐条将日期进行格式化后再传输 Date date = new SimpleDateFormat(& ...

  9. php匹配中文代码(字符串中包含中文或者全是中文)

    <?php$str= "中文";//全部是汉字的$par = "\x80-\xff";$par2= chr(0xa1).'-'.chr(0xff);//包 ...

随机推荐

  1. 三分搜索-ZOJ LightBulb

    开始算法基础学习的第一天 今天学习的内容是三分搜索 相对来说很基础的内容(还是觉得脑子不够用) 三分搜索主要用于凸函数查找极大值. (盗个图) 如图所示 若要查找该函数的最大值 可以考虑和二分法一样的 ...

  2. ios mrc & arc 并用

    如果在arc工程中倒入mrc文件就会提示出错. 解决办法如下: 在targets的build phases选项下Compile Sources下选择要使用arc编译的文件,双击它,输入-fno-obj ...

  3. Hibernate如何执行存储过程?

    Hibernate如何执行存储过程? @Overridepublic Boolean setVarValue(final String processInstanceId, final String ...

  4. js 连等赋值 分析

    JavaScript权威指南-第6版 4.11 赋值表达式 提到了连等赋值的情况,但是解释的不够详细,所以在此总结下: 首先看书上最重要的一句话: 这句话总结下就是: A = B ; // 整个表达式 ...

  5. Sonnet-十四行诗

    <Wish> Of our best wishes we could desire increase, That thereby rose's aroma might never die, ...

  6. 160405、quartz持久化所需表结构

    delete from qrtz_fired_triggers;   delete from qrtz_simple_triggers;   delete from qrtz_simprop_trig ...

  7. python2--升级python3

    先安装开发工具包: yum -y group install "Development Tools" 安装Python的依赖包: yum -y install openssl-de ...

  8. 在虚拟机中的搭建Web服务器(CentOS)

    1.制作本地yum源 相关可查看:http://www.cnblogs.com/xiaomingzaixian/p/8424290.html 2.安装JDK 上传上传jdk-7u45-linux-x6 ...

  9. 20165330 2017-2018-2 《Java程序设计》第2周学习总结

    课本知识总结 第二章 基本数据类型与数组 标识符:标识类名.变量名.方法名.类型名.数组名及文件名的有效字符序列. 标识符的第一个字符不能是数字字符,且字母区分大小写. Java语言使用Unicode ...

  10. 部署本地gitlab

    一.gitlab简介 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能 ...