国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP數(shù)組傳遞給JavaScript以及json_encode的gbk中文亂碼

2024-09-04 11:45:46
字體:
供稿:網(wǎng)友

文章介紹了關(guān)于PHP數(shù)組傳遞給JavaScript以及json_encode的gbk中文亂碼的解決 ,下面是創(chuàng)建JSON函數(shù),這一段來自網(wǎng)上某一位大俠

  1. /************************************************************** 
  2.  * 
  3. *    使用特定function對數(shù)組中所有元素做處理 
  4. *    @param    string    &$array        要處理的字符串 
  5. *    @param    string    $function    要執(zhí)行的函數(shù) 
  6. *    @return boolean    $apply_to_keys_also        是否也應(yīng)用到key上 
  7. *    @access public 
  8. * 
  9. *************************************************************/ 
  10. function arrayRecursive(&$array$function$apply_to_keys_also = false) 
  11.     foreach ($array as $key => $value) { 
  12.         if (is_array($value)) { 
  13.             arrayRecursive($array[$key], $function$apply_to_keys_also); 
  14.         } else { 
  15.             $array[$key] = $function($value); 
  16.         } 
  17.         if ($apply_to_keys_also && is_string($key)) { 
  18.             $new_key = $function($key); 
  19.             if ($new_key != $key) { 
  20.                 $array[$new_key] = $array[$key]; 
  21.                 unset($array[$key]); 
  22.             } 
  23.         } 
  24.     } 
  25. /************************************************************** 
  26.  * 
  27. *    將數(shù)組轉(zhuǎn)換為JSON字符串(兼容中文) 
  28. *    @param    array    $array        要轉(zhuǎn)換的數(shù)組 
  29. *    @return string        轉(zhuǎn)換得到的json字符串 
  30. *    @access public 
  31. * 
  32. *************************************************************/ 
  33. function JSON($array) { 
  34.     arrayRecursive($array'urlencode', true); 
  35.     $json = json_encode($array); 
  36.     return urldecode($json); 
  37. 連接數(shù)據(jù)庫取值給數(shù)組$array1 
  38.  代碼如下 復(fù)制代碼 
  39. $dbcnx = @mysql_connect ( "localhost""root""1234" ); 
  40. if (! $dbcnx) { 
  41.     echo ("Unable to connect to the " . "database server at this time."); 
  42.     exit (); 
  43. if (! @mysql_select_db ( "pms" )) { 
  44.     echo ("Unable to locate the joke " . "database at this time."); 
  45.     exit (); 
  46. mysql_query ( "SET NAMES 'GB2312'" ); 
  47.     $q=mysql_query("select * from ability where ALV = 1");  
  48.     while($row=mysql_fetch_array($q)){  
  49.      $array1[] = $row[AName]; 

數(shù)組array1傳遞到JavaScript給數(shù)組ability1

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

另一種json中文亂碼解決方法,如果是中文的話就要注意了,在網(wǎng)上找到一種解決方法:

  1. <?php  
  2. /* 處理json_encode中文亂碼 */  
  3. $data = array ('game' => '冰火國度''name' => '刺之靈''country' => '冰霜國''level' => 45 );  
  4. echo json_encode ( $data );  
  5. echo "<br>";  
  6. $newData = array ();  
  7. foreach ( $data as $key => $value ) {  
  8. $newData [$key] = urlencode ( $value );  
  9. }  
  10. echo urldecode ( json_encode ( $newData ) );  
  11. ?> 
后來請教了別人,還可以用base64編碼,不過base64編碼不可以放在URL中,百度是這樣解釋的:標(biāo)準(zhǔn)的Base64并不適合直接放在URL里傳輸,因為URL編碼器會把標(biāo)準(zhǔn)Base64中的“/”和“+”字符變?yōu)樾稳?ldquo;%XX”的形式,而這些“%”號在存入數(shù)據(jù)庫時還需要再進行轉(zhuǎn)換,因為ANSI SQL中已將“%”號用作通配符。

不過我的數(shù)據(jù)是要通過POST發(fā)送的,并不在HTTP 的head中,而在message-body里,所以不受影響。

json_encode 只能接受utf-8格式的數(shù)據(jù)

例如:'胥'經(jīng)過json_encode處理后變?yōu)?#39;u80e5',最終的json中中文部分被替換為unicode編碼。我們要解決的就是將對象轉(zhuǎn)換為json并保證對象內(nèi)部的中文在json中仍然是以正常的中文出現(xiàn),現(xiàn)在看來只使用json_encode是不能達到目的的.

我的解決方法:先將類中的中文字段進行url編碼(urlencode),然后再對對象進行json編碼(jsonencode),最后url解碼(urldecode)json,即最終的json,里面的中文依舊是那個中文! 測試代碼如下:

  1. <?php  
  2. class myClass {  
  3. public $item1 = 1;  
  4. public $item2 = '中文';  
  5. function to_json() {  
  6. //url編碼,避免json_encode將中文轉(zhuǎn)為unicode  
  7. $this->item2 = urlencode($this->item2);  
  8. $str_json = json_encode($this);  
  9. //url解碼,轉(zhuǎn)完json后將各屬性返回,確保對象屬性不變  
  10. $this->item2 = urldecode($this->item2);  
  11. return urldecode($str_json);  
  12. }  
  13. }  
  14. $c = new myClass();  
  15. echo json_encode($c);  
  16. echo '<br/>';  
  17. echo $c->to_json();  
  18. echo '<br/>';  
  19. echo json_encode($c);  
  20. echo '<br/>';  
  21. echo json_encode('胥');  
  22. ?> 

程序輸出結(jié)果:

  1. {"item1":1,"item2":"u4e2du6587"}  
  2. {"item1":1,"item2":"中文"}  
  3. {"item1":1,"item2":"u4e2du6587"}  
  4. "u80e5" 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜良县| 根河市| 宣城市| 普安县| 龙门县| 永春县| 高唐县| 台山市| 德州市| 贵南县| 松桃| 南和县| 枣阳市| 兴业县| 岑巩县| 玛纳斯县| 西乌珠穆沁旗| 南阳市| 樟树市| 时尚| 额敏县| 开江县| 富阳市| 丁青县| 纳雍县| 区。| 雅安市| 旅游| 黄浦区| 中山市| 中西区| 咸宁市| 威信县| 高州市| 洛宁县| 信丰县| 阜新| 锦州市| 湘乡市| 天水市| 宁阳县|