筆者以撰寫PHP為主
慣用CodeIgniter Framework ,或單純採用Smarty 樣板引擎開發網站
若有接觸過或經常使用jQuery 的程式設計師, 應該都知道jQuery 是以UTF-8為主
筆者曾經遇過的案例是在公司內部的測試機以及本機電腦跑
各瀏覽器下瀏覽與操作,都沒有問題
移轉到客戶的測試環境下,也如預期能正常運作
但移轉到客戶的正式環境下,在IE各版本底下,$.ajax 的所有回傳全部都是 undefined
一度以為jQuery 有問題
再透過jQuery 1.4.1 (目前最新版本) 回傳的訊息比較詳細,是 c00ce56e 的錯誤訊息
經過Google大神的指導之下,原來這個訊息是「不支援指定的編碼」
再更進一步查詢才知道,原來IE不論什麼版本,頁面編碼與後端回傳的編碼必須是相同的
而c00ce56e錯誤是指頁面的編碼與後端回傳編碼不符導致
筆者覺得奇怪,前台, 後端程式都是 php 撰寫,並且header是utf-8沒有錯
甚至以為是CodeIgniter Framework作怪, 但只有客戶的正式環境會有問題
檢查了PHP的設定, 該設定的都設了,仍然是有問題
後來腦袋靈光一閃,會不會是Apache 的預設編碼與前台的編碼不同
最後的嘗試,index.php 的最開頭加上 ini_set("default_charset","utf-8");
結果,差點沒落淚,整個就是正常沒問題了
最終的分析結果,應是APACHE的預設編碼,讓回傳的json的header是不同編碼,而導致IE底下出現如此的錯誤
所以最好的方法就是,直接在程式中加入預設編碼為UTF-8的設定,這樣應該不會再遇到什麼怪問題了
留言
張貼留言