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"。