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

首頁 > 語言 > PHP > 正文

PHP JSON_DECODE/JSON_ENCODE中文內容為NULL或亂碼

2024-09-04 11:47:54
字體:
來源:轉載
供稿:網友

可能用很多朋友使用json數據時利用php自帶的函數JSON_DECODE/JSON_ENCODE處理中文內容時會碰到出現NULL或亂碼問題,下面我來給大家介紹為什么會出現這樣的問題,例:

  1. <?php 
  2. $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
  3. var_dump(json_decode($json)); 
  4. var_dump(json_decode($json, true)); 
  5. ?> 

輸出結果

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

完全正確沒有任何問題,那么我們測試中文,代碼如下:

  1. <?php 
  2. $json = '{"a":"中國人人"}'
  3. var_dump(json_decode($json)); 
  4. ?> 

結果:{"text":null,"status":1},后來從php手冊中得出,json_encode 和 json_decode只支持utf-8編碼的字符,GBK的字符要用json就得轉換一下,這樣我們就好辦了

轉換一個編碼,代碼如下:

  1. /* 
  2.     字符串GBK轉碼為UTF-8,數字轉換為數字。 
  3. */ 
  4. function ct2($s){ 
  5.     if(is_numeric($s)) { 
  6.         return intval($s); 
  7.     } else { 
  8.         return iconv("GBK","UTF-8",$s); 
  9.     } 
  10. /* 
  11.     批量處理gbk->utf-8 
  12. */ 
  13. function icon_to_utf8($s) { 
  14.   if(is_array($s)) { 
  15.     foreach($s as $key => $val) { 
  16.       $s[$key] = icon_to_utf8($val); 
  17.     } 
  18.   } else { 
  19.       $s = ct2($s); 
  20.   } 
  21.   return $s
  22. echo json_encode(icon_to_utf8("廈門")); 

這樣還是有時會有問題,后來找了一種在json_encode之前,把所有數組內所有內容都用urlencode()處理一下,然用json_encode()轉換成json字符串,最后再用urldecode()將編碼過的中文轉回來,寫了個函數:

  1. /************************************************************** 
  2. * 
  3. *    使用特定function對數組中所有元素做處理 
  4. *    @param    string    &$array        要處理的字符串 
  5. *    @param    string    $function    要執行的函數 
  6. *    @return boolean    $apply_to_keys_also        是否也應用到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. *    將數組轉換為JSON字符串(兼容中文) 
  28. *    @param    array    $array        要轉換的數組 
  29. *    @return string        轉換得到的json字符串 
  30. *    @access public 
  31. * 
  32. *************************************************************/ 
  33. function JSON($array) { 
  34.     arrayRecursive($array'urlencode', true); 
  35.     $json = json_encode($array); 
  36.     return urldecode($json); 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 迁西县| 西丰县| 昭平县| 乌审旗| 余江县| 双鸭山市| 集贤县| 广灵县| 宽城| 弋阳县| 亚东县| 耿马| 安吉县| 天柱县| 剑河县| 郑州市| 莱州市| 呼玛县| 乐东| 岳阳市| 青冈县| 广宁县| 涿州市| 宁明县| 房山区| 高唐县| 夏河县| 左云县| 胶州市| 南通市| 大姚县| 武隆县| 平塘县| 万安县| 齐齐哈尔市| 庄河市| 西安市| 义马市| 昆明市| 石渠县| 高雄市|