帝国CMS模板大全
www.admin99.cn
www.92cms.cn 帝国CMS模板下载站!,情怀,养站,二次开发!源码需求比较大的一站式会员下载,价更省!!!

PHP数组传递给JavaScript以及json_encode的gbk中文乱码

PHP数组传递给JavaScript以及json_encode的gbk中文乱码

文章介绍了关于PHP数组传递给JavaScript以及json_encode的gbk中文乱码的解决 ,下面是创建JSON函数,这一段来自网上某一位大侠

/**************************************************************  
 *  
*    使用特定function对数组中所有元素做处理  
*    @param    string    &$array        要处理的字符串  
*    @param    string    $function    要执行的函数  
*    @return boolean    $apply_to_keys_also        是否也应用到key上  
*    @access public  
*  
*************************************************************/  
function  arrayRecursive(& $array ,  $function ,  $apply_to_keys_also  = false) 

     foreach  ( $array   as   $key  =>  $value ) { 
         if  ( is_array ( $value )) { 
            arrayRecursive( $array [ $key ],  $function ,  $apply_to_keys_also ); 
        }  else  { 
             $array [ $key ] =  $function ( $value ); 
        } 
         if  ( $apply_to_keys_also  &&  is_string ( $key )) { 
             $new_key  =  $function ( $key ); 
             if  ( $new_key  !=  $key ) { 
                 $array [ $new_key ] =  $array [ $key ]; 
                unset( $array [ $key ]); 
            } 
        } 
    } 

/**************************************************************  
 *  
*    将数组转换为JSON字符串(兼容中文)  
*    @param    array    $array        要转换的数组  
*    @return string        转换得到的json字符串  
*    @access public  
*  
*************************************************************/  
function  JSON( $array ) { 
    arrayRecursive( $array ,  'urlencode' , true); 
     $json  = json_encode( $array ); 
     return  urldecode( $json ); 

连接数据库取值给数组 $array1  
 代码如下 复制代码 
$dbcnx  = @mysql_connect (  "localhost" ,  "root" ,  "1234"  ); 
if  (!  $dbcnx ) { 
     echo  ( "Unable to connect to the "  .  "database server at this time." ); 
     exit  (); 

if  (! @mysql_select_db (  "pms"  )) { 
     echo  ( "Unable to locate the joke "  .  "database at this time." ); 
     exit  (); 

mysql_query (  "SET NAMES 'GB2312'"  ); 
     $q =mysql_query( "select * from ability where ALV = 1" );  
     while ( $row =mysql_fetch_array( $q )){  
      $array1 [] =  $row [AName]; 

<script type= "text/javascript"  src= "JS/jquery-1.7.2.min.js" ></script> 
<script type= "text/javascript" > 
var  ability1=<?php  echo  JSON( $array1 );?>; 
var  a= eval ( "ability1" ); 
alert(a[0]); 
</script> 

另一种json中文乱码解决方法,如果是中文的话就要注意了,在网上找到一种解决方法:

<?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"  

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP数组传递给JavaScript以及json_encode的gbk中文乱码》
文章链接:https://www.admin99.cn/6731
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
QQ站长交流群:953950264

登录

找回密码

注册