php 怎么解決返回json數據中文顯示不穩定

2016-11-11 1653 0 編輯:程序開發永勝 來源:網站開發書籍

當使用php自帶的json_encode對數據進行編碼時,中文都會變成unicode,導致不可讀。如:對字符串”北京“進行json_encode后,輸出的是"\u53a6\u95e8"。

查詢了一下,有四種解決方法:

1. 將"\u53a6\u95e8"還原成“北京”,使用如下的代碼:

$str= preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $str);

2. 先將中文字段urlencode,json_encode后,再用urldecode,也可以顯示中文。

$code = urldecode(json_encode(urlencode("北京")));

3. 自PHP5.4版本起,已經給Json_encode函數新增了一個參數選項: JSON_UNESCAPED_UNICODE。加上這個參數后,就不會自動把中文編碼了。

echo json_encode("北京", JSON_UNESCAPED_UNICODE);

4. 作者自己根據以上的解決方法,重寫了一下 json_encode 和 json_decode 這兩個方法,如下:

查看代碼打印

/**

 * json 生成,分析 支持中文

 */

class Json_Helper {

    /**

     * 生成json

     */

    public static function encode($str){

        $json = json_encode($str);

        //linux

        return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $json);

        //windows

        //return preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2LE', 'UTF-8', pack('H4', '\\1'))", $json);

    }

    /**

     * 分析json

     */

    public static function decode($str) {

        return json_decode($str);

    }

}

另外需要特別注意的是:由于 json_encode 和 json_decode只支持utf-8編碼的字符,GBK的字符要用json就得轉換一下,下面也同時給出GBK轉UTF-8的相關代碼:

查看代碼打印

/*

    字符串GBK轉碼為UTF-8,數字轉換為數字。

*/

function ct2($s){

    if(is_numeric($s)) {

        return intval($s);

    } else {

        return iconv("GBK","UTF-8",$s);

    }

}

/*

    批量處理gbk->utf-8

*/

function icon_to_utf8($s) {

  if(is_array($s)) {

    foreach($s as $key => $val) {

      $s[$key] = icon_to_utf8($val);

    }

  } else {

      $s = ct2($s);

  }

  return $s;

}

使用示例:

查看代碼打印

echo json_encode(icon_to_utf8("北京"));

本站文章均為深正網站建設摘自權威資料,書籍,或網絡原創文章,如有版權糾紛或者違規問題,請即刻聯系我們刪除,我們歡迎您分享,引用和轉載,但謝絕直接搬磚和抄襲!感謝...
關注深正互聯
七星彩头尾