作者:
CheLiu (劉徹)
2015-04-21 10:47:19這幾天遇到了一個怪怪的問題
問題敘述如下
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
在資料庫連接加上"set names utf8" or 讀取CSV字串加上iconv()強制轉換編碼 or 你資料庫編碼不正確
作者:
CheLiu (劉徹)
2015-04-21 11:30:00set names那個有加 而且有把原本不行的資料庫備份到本機進行測試 結果又是可以
Live Server DB的Collation是不是utf8?還有你的CSV檔有沒有BOM?還有你可以試著在正式機器上將資料寫入DB前 先輸出看看這時的UTF8是不是亂碼 是亂碼就排除掉DB出問題的可能性
作者:
CheLiu (劉徹)
2015-04-21 12:25:00先輸出就已經是亂碼了 所以看起來不是資料庫問題BOM的話應該也沒問題 同一份檔案本機可以 也有試過用記事本去除BOM 結果也是一樣
想確認下上傳的檔案編碼是不是UTF8? 另外輸出的PHP頁面也要加UTF8的header 開網頁看是否還是亂碼
作者: sunnyvisit (visit) 2015-04-21 14:12:00
可能本來utf8正常但其他編碼就會有問題?
作者:
CheLiu (劉徹)
2015-04-21 14:38:00上傳和輸出的頁面編碼都是utf8
如果你本地跟正式Server一個是Windows一個是Linux的話 我懷疑是語系問題 試試看在程式開頭加上這句setlocale(LC_ALL,'zh_TW.UTF-8') 或者是zh_TW總之是正式機器系統中的語系代號 測試看看我想就是fgetcsv本身的問題了 網上也有人重寫了這個function 不過最簡單方法就是用5.2以上的PHP版本就應該沒這個問題了