解决PHP 输出csv文件中文乱码

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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格式文件没有BOMBOM的说法很多,正常情况下,在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"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值