close

今天剛好遇到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

arrow
arrow
    創作者介紹
    創作者 蕭瑞文 的頭像
    蕭瑞文

    Neil的部落格

    蕭瑞文 發表在 痞客邦 留言(0) 人氣()