天天看點

php傳回中文是 u,php json_encode總是傳回unicode字元 "u."問題 解決

最近遇上了一件怪事,前兩天寫的好好的代碼,今天再運作就亂碼了。查了一下,不是一般意義的亂碼,而是傳回的unicode編碼的字元。

如漢字:登入失敗,經過json_encode之後傳回變成:"\u767b\u5f55\u5931\u8d25"

實在氣死雜家,找了一通,發現這是個普遍問題,最終解決方法如下:

正常調用json_encode($arr),在echo之間,将這個json資料通過以下函數處理下:

public static function JSON($str){

$json = json_encode($str);

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

}

這樣就再也不亂碼了。對于高版本php,可以直接加個參數,但對低版本無效,是以隻能這樣。完整代碼如下:

調用示例:

// echo "登入失敗";$arr = array ();$arr ['code'] = - 1;$arr ['message'] = "登入失敗";echo $arr ['message'];$arr ['data'] = "";return util::JSON ( $arr );

參考: http://stackoverflow.com/questions/6771938/any-way-to-return-php-json-encode-with-encode-utf-8-and-not-unicode