好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php json_encode()函数中文编码乱码解决方法 - php高级

php json_encode()函数中文编码乱码解决方法

在我使用php json_encode()时,如果是英文或数字没一点问题,但是用到中文是居然出现不可识别的中文乱码了,下面看我解决json_encode中文乱码方法。

在网上找到一种解决方法,代码如下:

<?php   /* 处理json_encode中文乱码 */    $data  =  array  ( 'game'  =>  '冰火国度' ,  'name'  =>  '刺之灵' ,  'country'  =>  '冰霜国' ,  'level'  => 45 );   echo  json_encode (  $data  );   echo   "<br>" ;   $newData  =  array  ();   foreach  (  $data   as   $key  =>  $value  ) {   $newData  [ $key ] = urlencode (  $value  );   }   echo  urldecode ( json_encode (  $newData  ) );   ?> 

后来请教了别人,还可以用base64编码,不过base64编码不可以放在URL中,百度是这样解释的:

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的[/]和[+]字符变为形如[%XX]的形式,而这些[%]号在存入数据库时还需要再进行转换,因为ANSI SQL中已将[%]号用作通配符。

不过我的数据是要通过POST发送的,并不在HTTP 的head中,而在message-body里,所以不受影响。

json_encode 只能接受utf-8格式的数据

例如:'胥'经过json_encode处理后变为'u80e5',最终的json中中文部分被替换为unicode编码,我们要解决的就是将对象转换为json并保证对象内部的中文在json中仍然是以正常的中文出现,现在看来只使用json_encode是不能达到目的的。 

我的解决方法: 先将类中的中文字段进行url编码(urlencode),然后再对对象进行json编码(jsonencode),最后url解码(urldecode)json,即最终的json,里面的中文依旧是那个中文,测试代码如下:

<?php   class  myClass {   public   $item1  = 1;   public   $item2  =  '中文' ;   function  to_json() {   //url编码,避免json_encode将中文转为unicode    $this ->item2 = urlencode( $this ->item2);   $str_json  = json_encode( $this );   //url解码,转完json后将各属性返回,确保对象属性不变    $this ->item2 = urldecode( $this ->item2);   return  urldecode( $str_json );   }   }   $c  =  new  myClass();   echo  json_encode( $c );   echo   '<br/>' ;   echo   $c ->to_json();   echo   '<br/>' ;   echo  json_encode( $c );   echo   '<br/>' ;   echo  json_encode( '胥' );   ?> 

程序输出结果:

{"item1":1,"item2":"u4e2du6587"}   {"item1":1,"item2":"中文"}   {"item1":1,"item2":"u4e2du6587"}   "u80e5" 

查看更多关于php json_encode()函数中文编码乱码解决方法 - php高级的详细内容...

  阅读:82次