作者redhat1980 (家庭公用ID XD)
看板PHP
標題[請益] 請教Tab分隔CSV問題
時間Tue Mar 29 02:36:50 2011
小弟目前遇到一個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)
1F:→ akasan:對 big5 有意見要轉 utf-8 用個 iconv 不就好了 03/29 02:41
2F:→ akasan:兩光一點用 explode 就可以解了 03/29 02:42
3F:推 Huangs:setlocale() 設定編碼為 big5,然後用 fgetcsv() 03/29 02:52
4F:→ arrack:最好不要直接用ICONV轉全部 03/29 02:57
5F:→ redhat1980:$contents = file('檔案路徑'); 03/29 03:01
6F:→ redhat1980:$handle = fopen('寫入的檔案', 'w'); 03/29 03:01
7F:→ redhat1980:foreach($contents as $line){ 03/29 03:02
8F:→ redhat1980:setlocale(LC_ALL,"big5"); 03/29 03:02
9F:→ redhat1980:fputcsv($handle, explode("\t", $line));} 03/29 03:02
10F:→ redhat1980:fclose($handle); ?> 03/29 03:03
11F:→ redhat1980:大大小弟這樣做不知對嗎XD 轉過還是亂碼耶Orz 03/29 03:03
12F:→ redhat1980:上面是小弟把Tab轉csv 03/29 03:04
13F:→ redhat1980:小弟眼殘 是fgetcsv 03/29 03:07