解决PHP的json_encode处理中文被转码为全英文的方法

最近使用json_encode转换数组为json数据,储存在数据库里面,因为字段的长度个内容不确定,就只能使用这个方法了,但是使用json_decode解析为数组以后,却出现了类

似”u590fu5a03u7684u8bf1u60d14u5979u7684u6280u5de7″,通过查询百度,这应该是UCS-2编码的字符串,那么如何转换这个字符串呢?

其实在在php5.2以前的版本中做json_encode转换的时候的时候。中文会被unicode编码, php5.3加入了options参数, 5.4以后才加入JSON_UNESCAPED_UNICODE,这个参数,不需要做escape和unicode处理。 所以在5.4之前都需要对中文做个处理。
php5.4里面的处理

json_encode($str, JSON_UNESCAPED_UNICODE);

 

php5.4之前,有两种方法处理

 

方法一

 
function encode_json($str){  
    return preg_replace("/u([0-9a-f]+)/ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $code);  
}

 

在实际应用中有个问题,部分字符会掉,不止为何,如字符串:”日期11.2″会被变成”日期.2″。

方法二

 
function encode_json($str) {
    return urldecode(json_encode(url_encode($str)));  
}
function url_encode($str) {
    if(is_array($str)) {
        foreach($str as $key=>$value) {
            $str[urlencode($key)] = url_encode($value);
        }  
    } else {
        $str = urlencode($str);
    }
    return $str;  
}

本站使用的是虚拟主机,就没法修改php的版本了,所以就只能采用第一种方法了,不过方法确实还是有效果的。

方法三
 
function decodeUnicode($str){
  return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
   create_function(
    '$matches',
    'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
   ),
   $str);
}

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 字符串
, 编码
参数
json encode 中文转码、js 转码 encode、html encode 在线转码、html encode 转码、encode转码,以便于您获取更多的相关知识。

时间: 2024-10-26 18:44:14

解决PHP的json_encode处理中文被转码为全英文的方法的相关文章

解决json_encode 函数中文被编码成 null的办法

json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 json格式,十分方便.但是有可能你在使用json_encode函数时,无奈的发现中文被编码成null了.原来json只支持转义utf-8编码格式的中文.php数组使用json_encode函数中文被编码成null的原因是转义gbk 或者别的编码时,中文被忽略了.一般出现在文档编码或者输出的内容编码是非UTF-8时,也就是说,GBK或者GB2312的中文,就会出现编码失败的现象. php数组使用json_e

php中json_encode UTF-8中文乱码的更好解决方法_php技巧

最近在接口代码当中用到过json_encode,在网上找到说json_encode编码设置为UTF-8中文就不会乱码,经验证这办法确实是有效果的,但是不知道为什么,代码在用过一段时间之后就不太管用了.以下是自己的解决json_encode的办法.有更好的方法请分享出来吧! 第一种: 这种简单的做一个代码转换,urlcode之后再返回所需数组 我代码这样就足够了. 代码如下 复制代码 public static function encodeOperations ($array) { foreac

四步解决Linux系统中出现中文乱码问题

  在使用CentOS 系统时,安装的时候可能你会遇到英文的CentOS系统,在这中情况下安装CentOS系统时是默认安装(即英文).安装完毕后,出现的各种中文乱码.那么,我们如何解决这种问题呢. 一.CentOS系统访问 g.cn ,发现中文乱码. 于是用以前的方式:yum -y install fonts-chinese CentOS系统安装后,还是不能显示中文字体.我使用 gedit 编辑源码,其中文注释也为乱码. 后来,终于找到以下方法可以解决,需要两个中文支持的包: fonts-chi

解决SecureCRT登陆Linux显示中文乱码

今天在测试CentOS Linux中文版,使用SecureCRT登陆之后,运行命令发现在SecureCRT客户端下中文显示为乱码. SecureCRT作为Linux管理员是经常使用的一个远程管理工具,是高度17813.html">可定制的终端仿真器,适用于 Internet 和 Intranet,支持 http://www.aliyun.com/zixun/aggregation/9485.html">IPv6 标准.对于连接到运行 Windows.UNIX 和 VMS 的

完美解决Get和Post请求中文乱码的问题_java

对于Post请求,只需在Servlet或者jsp中写入如下代码就可以把解决从表单中传入的中文乱码问题 request.setCharacterEncoding("utf-8"); 而对于Get请求,因为请求参数会被附加到地址栏的URL之后,所以不能用上面的处理方法.应该这样: String str=request.getQueryString(); //使用URLDecoder解码字符串 String str1=java.net.URLDecoder.decode(str,"

escape函数解决js中ajax传递中文出现乱码问题_javascript技巧

本文实例讲述了escape函数解决js中ajax传递中文出现乱码问题,分享给大家供大家参考.具体方法如下: 一.问题描述: 本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过 request.getparameter()是能直接获取到请求参数的,但后来的javascript将escape()换成了unicode字符集编 码,如此一来,在jsp教程和servlet中就没法直接拿到请求参数了,具体原因我也不知道. 二.解决办法: 1.首先对中文字符进行两次

php中json_encode格式中文问题解决方法

1. 原因分析: 在存储到数据库时!MySQL 不会存储 unicode 字符: MySQL 仅支持从基本的多语种平面字符 (0×0000-0xFFFF).请尝试存储一个同义词相反:) 更新: MySQL 5.5.3 上 (其中尚未 GA), 支持补充字符如果您使用 UTF8MB4 编码. json_encode中文的时候,会把每个中文字符encode成"uxxxx" 而存进数据库的时候,""被屏蔽了,直接变成"uxxxx" 2. 解决问题: 知

jsp接收参数 转码-jsp页面接收的中文被转码为&#xxxxx等信息

问题描述 jsp页面接收的中文被转码为&#xxxxx等信息 用的是strtus2,在后台拼接了一段html代码使用参数传到前台,拼接的部分代码为: 安全巡检安全加固 在前台接收的参数为:<tr><td width='50%' ><input type='checkbox' id='ab1'name='ability' value='1' />安全巡检</td><td width='50%' ><input type='checkbo

搜索-java中文乱码问题,试了网上好多方法都不行!求解!!

问题描述 java中文乱码问题,试了网上好多方法都不行!求解!! 这是个java项目工程.我在网页上搜索时候,发现会报错.好像是中文乱码问题. 该如何解决啊,有知道的吗? 我试了好多种转码方式,都不行: 解决方案 你的乱码问题应该是数据库的问题. 尊重原作者 ,你看下这个链接,可以解决你的问题http://www.111cn.net/database/mysql/41922.htm