作者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