编码[生活]在gbkgb2312编码中如何使用json_encode

json_encode  时间:2021-01-26  阅读:()

在gbkgb2312编码中如何使用j son_encode

在gbk/gb2312编码中如何使用json_encode/json_decode

J S ON是一种轻量级的数据交换格式完全语言无关但是采用了类似于C系列语言的约定更详细的介绍可以参考: http://json.org由于将数组/对象序列化为JS ON字符串的时候基本上只支持UTF-8/ASCII 而我们现在很多网站出于历史原因或者支持国产的原因采用了GBK/GB2312编码这个时候直接使用json_encode/json_decode的时候就可能会出问题了。

我们从B/S两个方面谈这个问题。

首先从B(Browser)方面来讲我们使用JSON作为和S(Server)数据交换的格式无论如何 S返回的JSON字符串都已经是Unicode的了 由于JavaScript内部采用了Unicode的编码 JavaScript会根据客户端的编码的不同而自动转化编码 J S ON的解析也就不成问题了。 比如:返回的数据是

"\u4e2d\u56fd\u4eba"

无论你的页面是GBK,还是UT F-8的都将可以正确解析为

“中国人"

比较简单的方式是调用Javascript的eval函数:

try{ eval("var ret = " +"\"\u4e2d\u56fd\u4eba\";") ; }catch(e) {} ; alert(ret) ;

再来看看S(Server)端 json_encode/json_decode会假定给定的数据是UTF-8编码的这儿就有几种思路了:

将数据转化为UTF-8编码的然后再调用json_encode,或者首先j son_decode,然后再转化为GBK编码的。

将数据urlencode这样所有的数据都是ASCII的了调用json_encode就没有问题了json_decode之后也需要urldecode下。自己编写函数将GBK编码直接转换为uni code代码。

其实第一种和第二种都是同样的思路 即将其编码转换为可encode的编码下面看看上面提到的解决方案的具体代码:encode之前转换为utf-8,decode之后转回gbk:function tb_json_encode($value, $options = 0)

{return json_encode(tb_json_convert_encoding($value, "GBK","UTF-8")) ;

}function tb_json_decode($str, $assoc = false, $depth = 512){return tb_json_convert_encoding(json_decode($str, $assoc) ,"UTF-8", "GBK") ;

}function tb_json_convert_encoding($m, $from, $to){switch(gettype($m)) {case ' integer' :case 'boolean' :case 'float' :case 'double' :case 'NULL' :return $m;case ' string' :return mb_convert_encoding($m, $to, $from) ;case 'object' :

$vars = array_keys(get_object_vars($m)) ;foreach($vars as $key) {

$m->$key = tb_json_convert_encoding($m->$key,$from , $to) ;

}return $m;

' 'case array :foreach($m as $k => $v) {

$m[tb_json_convert_encoding($k, $from, $to) ] =tb_json_convert_encoding($v, $from, $to) ;

}return $m;

default:

}return $m;

}encode之前urlencode,decode之后urldecode:function tb_json_encode(array $value, $options = 0) {array_walk_recursive($value, 'tb_json_encode' ) ;return $value;

}function tb_json_decode($value, $assoc = false, $depth = 512){array_walk_recursive($value, 'tb_json_decode' ) ;return $value;

}function tb_urlencode(&$value, &$key) {

$key = urlencode($key) ;

$value = urlencode($value) ;

}function tb_urldecode(&$value, &$key) {

$key = urldecode($key) ;

$value = urldecode($value) ;

}

第三种方式在这儿就不详细介绍了。

参考:http://gggeek.altervista.org/sw/article_20061113.htmlhttp://json.org

经过测试发现PHP的递归实现是在是太慢了于是尝试将地一种方案修改成了使用PHP内置的函数,相比而言要好很多:function tb_json_encode_ex($value, $options = 0)

{array_walk_recurs ive($value,

"tb_json_convert_encoding_g2u") ;return json_encode($value) ;

}function tb_json_decode_ex($value, $assoc=true, $depth=512){

$value = json_decode($value) ;array_walk_recurs ive($value,

"tb_json_convert_encoding_u2g") ;return $value;

}function tb_json_convert_encoding_g2u(&$value, &$key)

{

$value = mb_convert_encodi ng($value, "UTF-8", "GBK") ;}function tb_json_convert_encoding_u2g(&$value, &$key)

{

$value = mb_convert_encodi ng($value, "GBK", "UTF-8") ;}

事实上第一种方式有一个优点是和基本的json_decode兼容而第二种则不行。

第二种方式还可以有好多"变种" 比如使用

base64_encode/base64_decode等等。

10gbiz:香港/洛杉矶CN2直连线路VPS四折优惠,直连香港/香港/洛杉矶CN2四折

10gbiz怎么样?10gbiz在本站也多次分享过,是一家成立于2020的国人主机商家,主要销售VPS和独立服务器,机房目前有中国香港和美国洛杉矶、硅谷等地,线路都非常不错,香港为三网直连,电信走CN2,洛杉矶线路为三网回程CN2 GIA,10gbiz商家七月连续推出各种优惠活动,除了延续之前的VPS产品4折优惠,目前增加了美国硅谷独立服务器首月半价的活动,有需要的朋友可以看看。10gbiz优惠码...

A2Hosting三年付$1.99/月,庆祝18周年/WordPress共享主机最高优惠81%/100GB SSD空间/无限流量

A2Hosting主机,A2Hosting怎么样?A2Hosting是UK2集团下属公司,成立于2003年的老牌国外主机商,产品包括虚拟主机、VPS和独立服务器等,数据中心提供包括美国、新加坡softlayer和荷兰三个地区机房。A2Hosting在国外是一家非常大非常有名气的终合型主机商,拥有几百万的客户,非常值得信赖,国外主机论坛对它家的虚拟主机评价非常不错,当前,A2Hosting主机庆祝1...

港云网络(¥1/月活动机器),香港CN2 4核4G 1元/月 美国CN2

港云网络官方网站商家简介港云网络成立于2016年,拥有IDC/ISP/云计算资质,是正规的IDC公司,我们采用优质硬件和网络,为客户提供高速、稳定的云计算服务。公司拥有一流的技术团队,提供7*24小时1对1售后服务,让您无后顾之忧。我们目前提供高防空间、云服务器、物理服务器,高防IP等众多产品,为您提供轻松上云、安全防护。点击进入港云网络官方网站港云网络中秋福利1元领【每人限量1台】,售完下架,活...

json_encode为你推荐
月付百万的女人们男人们谈谈,和多大年龄的女人做爱最舒服集成显卡和独立显卡哪个好集成显卡和独立显卡是什么区别呢哪个好?华为p40和mate30哪个好华为mate30和荣耀3O那个好?机械表和石英表哪个好手表中,石英表和机械表的区别和优缺点浮动利率和固定利率哪个好浮动利率房贷与固定利率房贷比较 购房者如何选择苹果手机助手哪个好苹果手机助手哪个好股票软件哪个好股票软件哪个好,手机股票软件哪个好用股票软件哪个好请问:免费的模拟炒股软件哪个好?手机浏览器哪个好用手机哪个浏览器最好用手机浏览器哪个好用手机浏览器哪个好用?
查域名 阿里云os 香港vps99idc site5 wavecom 香港托管 英文站群 浙江独立 免费网站申请 e蜗 建立邮箱 电子邮件服务器 国外免费全能空间 免费phpmysql空间 免费网页申请 789电视剧 稳定空间 域名和主机 带宽测试 rewritecond 更多