2017年3月20日 星期一

解決 json_encode 亂碼問題

在開發微信機械人時遇到一個問題,所有在 PHP 中加入到數組的中文字,在經過 json_encode 後會變成亂碼。就像是:
{"KEY01":"\u6700\u65b0\u8cc7\u8a0a","KEY02":"\u95dc\u65bc\u54c1\u724c","KEY03":"\u5e97\u8216\u4f4d\u7f6e"}
之前用了一個愚蠢的解決方法,先以特訂的關鍵字注入數組,完成 json_encode 後,才用 str_replace 方式把關鍵字替換成中文字, 避開因 json_encode 而導致的亂碼問題。但原來有一個聰明的做法。只要在 json_encode 後加入 JSON_UNESCAPED_UNICODE 參數。例如:
$menuArray = array(
   "KEY01"=>"最新資訊",
   "KEY02"=>"關於品牌",
   "KEY03"=>"店舖位置",
);
echo("<br>JSON: ".json_encode($menuArray));
echo("<br>JSON_UNESCAPED_UNICODE: ".json_encode($menuArray, JSON_UNESCAPED_UNICODE));
echo("<br> ");
上面程式的執行結果如下:
JSON: {"KEY01":"\u6700\u65b0\u8cc7\u8a0a","KEY02":"\u95dc\u65bc\u54c1\u724c","KEY03":"\u5e97\u8216\u4f4d\u7f6e"}
JSON_UNESCAPED_UNICODE: {"KEY01":"最新資訊","KEY02":"關於品牌","KEY03":"店舖位置"}

沒有留言: