[請益] 請教Tab分隔CSV問題

看板PHP作者 (家庭公用ID XD)時間14年前 (2011/03/29 02:36), 編輯推噓1(1012)
留言13則, 4人參與, 最新討論串1/1
小弟目前遇到一個CSV檔案是用Tab分隔的,而該檔案儲存編碼又是big5 且檔案檔案每一行內容長度較長 檔案長的像這樣:(這是Fax server的LOG,小弟想把他以網頁顯示) "Status" "ErrorDesc" "ErrorCode" "StartTime" "EndTime" "Device" "QueueFileName" "FileSize" "CSID" "TSID" "CallerID" "RoutingInfo" "Pages" "接收錯誤" "傳入的呼叫不能接聽成傳真" "0x40000801" 3/16/2011 11:19:22 3/16/2011 11:20:20 "ESS ES56H-PI型資料傳真語音數據機" "C:\Documents and Settings\All Users\Application Data\Microsoft\Windows NT\MSFax\Queue\1CBE388F23332.tif" 0 "Fax" " " "" " " 0 (應該超過ptt可以正常顯示版面了) 小弟的code... <? $handle = fopen('檔案絕對路徑','rb'); if ($handle){ while (!feof($handle)) { $buffer = fgets($handle, 4096); print "<p>".$buffer; } fclose($handle); } ?> 這樣子寫 是能斷行(雖然很不漂亮XD) 但是會有亂碼問題 <p>拿掉就不會斷行了 檔案會連續的一直接著...Orz 原本想說是不是先把Tab分隔轉成,分隔的形式比較好處理,結果又中文亂碼 (檔案是big5...) 還請知道的大大若方便請指導小弟作法 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.127.178.149 ※ 編輯: redhat1980 來自: 122.127.178.149 (03/29 02:39)

03/29 02:41, , 1F
對 big5 有意見要轉 utf-8 用個 iconv 不就好了
03/29 02:41, 1F

03/29 02:42, , 2F
兩光一點用 explode 就可以解了
03/29 02:42, 2F

03/29 02:52, , 3F
setlocale() 設定編碼為 big5,然後用 fgetcsv()
03/29 02:52, 3F

03/29 02:57, , 4F
最好不要直接用ICONV轉全部
03/29 02:57, 4F

03/29 03:01, , 5F
$contents = file('檔案路徑');
03/29 03:01, 5F

03/29 03:01, , 6F
$handle = fopen('寫入的檔案', 'w');
03/29 03:01, 6F

03/29 03:02, , 7F
foreach($contents as $line){
03/29 03:02, 7F

03/29 03:02, , 8F
setlocale(LC_ALL,"big5");
03/29 03:02, 8F

03/29 03:02, , 9F
fputcsv($handle, explode("\t", $line));}
03/29 03:02, 9F

03/29 03:03, , 10F
fclose($handle); ?>
03/29 03:03, 10F

03/29 03:03, , 11F
大大小弟這樣做不知對嗎XD 轉過還是亂碼耶Orz
03/29 03:03, 11F

03/29 03:04, , 12F
上面是小弟把Tab轉csv
03/29 03:04, 12F

03/29 03:07, , 13F
小弟眼殘 是fgetcsv
03/29 03:07, 13F
文章代碼(AID): #1DaDL5eT (PHP)
文章代碼(AID): #1DaDL5eT (PHP)