看板 PHP 關於我們 聯絡資訊
這幾天遇到了一個怪怪的問題 問題敘述如下 1、有兩台機器 本機及正式系統機器 2、原本可以順利上傳匯入資料 不會亂碼 印象中沒有改到相關上傳的code卻突然變成 上傳之後會亂碼 3、之後本機再測試可以正常上傳不會亂碼後 就整個網頁再覆蓋到系統機器卻依然亂碼 懷疑是資料庫有設定改變?但卻又找不到 有跟本機比對過 都一樣 不曉得還有可能是哪邊有問題呢?謝謝 補充: 有把系統機器的資料庫備份轉移到本機 再次測試依然可以正確上傳無亂碼 所以有可能是機器本身哪邊設定嗎? 更新問題: 經過大家的提示或教導後有發現一個不同點 就是 1.在本機讀取檔案內容echo 出來是亂碼,編碼確定是UTF8 但是可以正確寫入資料庫 2.在SERVER端讀取同一份檔案echo出來 編碼測試也確定是UTF8 但是ECHO出來 卻會變成空白 或是不同字元 總之就是跟本機echo出來的 完全不一樣,當然也還是無法些寫入資料庫 問題解決&結論 首先感謝rockmanalpha版友花時間協助及幫忙,不然我應該很難找出問題 這個問題經過一些測試rockmanalpha發現可能是 5.2好像有一個BUG 會將分隔後的資料中第一個高位字元拿掉 所以會造成中文有亂碼,但卻又不是每個系統都會發生 或是fgetcsv 有什麼隱藏參數 這部分小弟會找時間再測試看看 最後解決方式是在CSV檔案裡面的每個欄位都加上雙引號 ex: "姓名","生日" 就這樣我手上兩個系統都沒有做任何設定更動或程式碼變動 問題就解決了 感謝rockmanalpha及眾位板友,也回饋給大家這個問題 謝謝大家 ※ 編輯: CheLiu (122.147.100.151), 04/21/2015 11:03:25
hareion08: 在資料庫連接加上"set names utf8" or 讀取CSV字串加上 04/21 11:12
hareion08: iconv()強制轉換編碼 or 你資料庫編碼不正確 04/21 11:12
CheLiu: set names那個有加 而且有把原本不行的資料庫備份到本機 04/21 11:30
CheLiu: 進行測試 結果又是可以 04/21 11:31
rockmanalpha: Live Server DB的Collation是不是utf8? 04/21 12:02
rockmanalpha: 還有你的CSV檔有沒有BOM? 04/21 12:05
rockmanalpha: 還有你可以試著在正式機器上將資料寫入DB前 先輸出 04/21 12:07
rockmanalpha: 看看這時的UTF8是不是亂碼 是亂碼就排除掉DB出問題 04/21 12:08
rockmanalpha: 的可能性 04/21 12:08
CheLiu: 先輸出就已經是亂碼了 所以看起來不是資料庫問題 04/21 12:25
CheLiu: BOM的話應該也沒問題 同一份檔案本機可以 也有試過用記事 04/21 12:26
CheLiu: 本去除BOM 結果也是一樣 04/21 12:26
rockmanalpha: 想確認下上傳的檔案編碼是不是UTF8? 另外輸出的PHP 04/21 13:42
rockmanalpha: 頁面也要加UTF8的header 開網頁看是否還是亂碼 04/21 13:43
sunnyvisit: 可能本來utf8正常但其他編碼就會有問題? 04/21 14:12
CheLiu: 上傳和輸出的頁面編碼都是utf8 04/21 14:38
rockmanalpha: 如果你本地跟正式Server一個是Windows一個是Linux 04/23 14:24
rockmanalpha: 的話 我懷疑是語系問題 試試看在程式開頭加上這句 04/23 14:25
rockmanalpha: setlocale(LC_ALL,'zh_TW.UTF-8') 或者是zh_TW 04/23 14:26
rockmanalpha: 總之是正式機器系統中的語系代號 測試看看 04/23 14:27
※ 編輯: CheLiu (122.147.100.151), 04/23/2015 15:36:51 ※ 編輯: CheLiu (122.147.100.151), 04/23/2015 18:40:50
rockmanalpha: 我想就是fgetcsv本身的問題了 網上也有人重寫了這個 04/23 19:00
rockmanalpha: function 不過最簡單方法就是用5.2以上的PHP版本就 04/23 19:01
rockmanalpha: 應該沒這個問題了 04/23 19:01