PHP 下载文件常采用字节流输出的方式。因此常用的下载csv格式代码如下:
header("Content-Type: application/force-download");
header("Content-type:text/csv;charset=gb2312");
header("Content-Disposition:filename=打开邮件导出".date("YmdHis").".csv");
echo "收件人邮箱,收件人姓名,发送时间\r";
ob_end_flush();
foreach($list as $rs) {
echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."\r"; flush();
}
exit;
这样下载的csv文件使用记事本或者sublime text等编辑器打开是正常的,但是使用excel打开就会乱码,原因是输出的csv格式文件没有BOM,BOM的说法很多,正常情况下,在PHP中是需要去除BOM的,不过csv文件需要使用BOM标示字符编码。解决方式如下:
header("Content-Type: application/force-download");
header("Content-type:text/csv;charset=gb2312");
header("Content-Disposition:filename=打开邮件导出".date("YmdHis").".csv");
echo chr(0xEF).chr(0xBB).chr(0xBF);
echo "收件人邮箱,收件人姓名,发送时间\r";
ob_end_flush();
foreach($list as $rs)
{
echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."\r";
flush();
}
exit;---------- 更新 2017-09-05 ----------------由于Linux的换行符与window的差别。如果上述代码在Linux服务器中有不好的反应,可将 "\r" 改为 "\r\n"。

本文介绍了一种在PHP中导出CSV文件的方法,并解决了导出的CSV文件在Excel中打开时出现乱码的问题。通过添加BOM来标识字符编码,并针对不同操作系统调整换行符。
1003

被折叠的 条评论
为什么被折叠?



