今天剛好遇到i18n的問題,正在我高高興興的使用PHP json_encode 和 JS JSON.parse的時候,突然出現了PHP json沒有回傳到Browser
然後就開啟Google chrome dev 去查看我的GET方法,response看有沒有回傳字串,發現居然空空如也!!!!
後來透過PHP
尋找錯誤代碼
得到結果為數字 5
對上PHP manual底下jimmetry的留言
0 = JSON_ERROR_NONE
1 = JSON_ERROR_DEPTH
2 = JSON_ERROR_STATE_MISMATCH
3 = JSON_ERROR_CTRL_CHAR
4 = JSON_ERROR_SYNTAX
5 = JSON_ERROR_UTF8
得知原來是JSON_ERROR_UTF8,才發現json在encode的時候,會因為含有如標題所示的符號,而導致JSON_ERROR_UTF8,
可以使用iconv('UTF-8', 'UTF-8//IGNORE',$string);
這樣會把非UTF-8的字元通通移除掉。 ció 這些字元應該屬於UTF-8阿!!! 於是乎再加上utf8_encode()方法,
把ISO-8859-1轉換為UTF-8,把他轉回來再進行過濾。這樣就可以成功保留這些拉丁字母拉!!!
題外話:
不過在stackOverflow不知道為什麼大家都比較推薦mb_convert_encoding的作法,似乎iconv名聲不是很好,有空再來研究看看
參考連結:
https://zh.wikipedia.org/wiki/ISO/IEC_8859-1
http://php.net/manual/en/function.json-last-error.php
https://stackoverflow.com/questions/10199017/how-to-solve-json-error-utf8-error-in-php-json-decode
留言列表