2016年4月24日 星期日

php log4php echo出 中文utf8的編碼 無法辨識

php在轉換json(json_encode())的時候會強制轉換成utf8的編碼

例:

{"returnCode":"03","returnMessage":"\u7f3a\u5c11\u5fc5\u586b\u503c","data":[]}

但是此json字串在header上去加上utf8的編碼是可以正確解密出來的,但是現在我要使用log4php來寫log的時候會照成log會無法閱讀的問題。

google一下無法由這件事情的去找到解決方式,一層一層查詢發現問題在於json_encode()這個function,他會將文字強制轉換成utf8的編碼變成無法直接閱讀。

解決方式,在要json_encode前先做urlencode在做完後再urldecode回來。

此問題就衍伸另外一個問題
在php的 urlencode()這個function上面只能是string,所以需要透過自己建立的function來做轉換,程式碼如下:

function urlencode_array($array){
 $out_array = array();
 foreach($array as $key => $value){
  if (is_array($value) ){
   $out_array[urlencode($key)] = urlencode_array($value);
  }else {
   $out_array[urlencode($key)] = urlencode($value);
  }
 }
 return $out_array;
}



特別注意的是要判斷$value是不是array,網路上有些方式是沒有這段的,若json的結構是很多層的將會在這邊跳出問題會解不出來。

大概是這樣,有其他問題在下面留言感謝