[請益] 匯入CSV問題 (以解決)

看板PHP作者 (劉徹)時間9年前 (2015/04/21 10:47), 9年前編輯推噓8(8015)
留言23則, 4人參與, 最新討論串1/1
這幾天遇到了一個怪怪的問題 問題敘述如下 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

04/21 11:12, , 1F
在資料庫連接加上"set names utf8" or 讀取CSV字串加上
04/21 11:12, 1F

04/21 11:12, , 2F
iconv()強制轉換編碼 or 你資料庫編碼不正確
04/21 11:12, 2F

04/21 11:30, , 3F
set names那個有加 而且有把原本不行的資料庫備份到本機
04/21 11:30, 3F

04/21 11:31, , 4F
進行測試 結果又是可以
04/21 11:31, 4F

04/21 12:02, , 5F
Live Server DB的Collation是不是utf8?
04/21 12:02, 5F

04/21 12:05, , 6F
還有你的CSV檔有沒有BOM?
04/21 12:05, 6F

04/21 12:07, , 7F
還有你可以試著在正式機器上將資料寫入DB前 先輸出
04/21 12:07, 7F

04/21 12:08, , 8F
看看這時的UTF8是不是亂碼 是亂碼就排除掉DB出問題
04/21 12:08, 8F

04/21 12:08, , 9F
的可能性
04/21 12:08, 9F

04/21 12:25, , 10F
先輸出就已經是亂碼了 所以看起來不是資料庫問題
04/21 12:25, 10F

04/21 12:26, , 11F
BOM的話應該也沒問題 同一份檔案本機可以 也有試過用記事
04/21 12:26, 11F

04/21 12:26, , 12F
本去除BOM 結果也是一樣
04/21 12:26, 12F

04/21 13:42, , 13F
想確認下上傳的檔案編碼是不是UTF8? 另外輸出的PHP
04/21 13:42, 13F

04/21 13:43, , 14F
頁面也要加UTF8的header 開網頁看是否還是亂碼
04/21 13:43, 14F

04/21 14:12, , 15F
可能本來utf8正常但其他編碼就會有問題?
04/21 14:12, 15F

04/21 14:38, , 16F
上傳和輸出的頁面編碼都是utf8
04/21 14:38, 16F

04/23 14:24, , 17F
如果你本地跟正式Server一個是Windows一個是Linux
04/23 14:24, 17F

04/23 14:25, , 18F
的話 我懷疑是語系問題 試試看在程式開頭加上這句
04/23 14:25, 18F

04/23 14:26, , 19F
setlocale(LC_ALL,'zh_TW.UTF-8') 或者是zh_TW
04/23 14:26, 19F

04/23 14:27, , 20F
總之是正式機器系統中的語系代號 測試看看
04/23 14:27, 20F
※ 編輯: CheLiu (122.147.100.151), 04/23/2015 15:36:51 ※ 編輯: CheLiu (122.147.100.151), 04/23/2015 18:40:50

04/23 19:00, , 21F
我想就是fgetcsv本身的問題了 網上也有人重寫了這個
04/23 19:00, 21F

04/23 19:01, , 22F
function 不過最簡單方法就是用5.2以上的PHP版本就
04/23 19:01, 22F

04/23 19:01, , 23F
應該沒這個問題了
04/23 19:01, 23F
文章代碼(AID): #1LDRewZH (PHP)