微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php 数据导出excel时的那些坑

因为需求简单,只需要导出成表格,所以是这么写的,通过发送header头实现文件下载(多说一句,header中可以实现的功能很多,有兴趣的童鞋可以深度发掘)。一开始没什么问题,结果游戏上线几天,玩家数据多起来之后,再想将数据导出,就这样了:

而且至今为止,我都不知道为什么数据量大之后就会出现这种情况,难道iconv处理的字符串长度有上限?没有去深究。

问题出来了就要解决,过程就不提了,无非谷歌,实践,再谷歌,再实践,直接上代码

header("Content-disposition:filename=".$filename.".csv");
$strexport= "\xEF\xBB\xBF".$csvtext;
exit($strexport);

这么写的原因是什么呢?
1.因为转码有问题,并且我通过对比远端数据编码格式,程序本身编码格式,文件格式均为utf-8,那我干脆去掉了第一张图中的编码转换,但是却发现windows环境下跑代码文件没问题,linux生产环境又出现了乱码问题

2.要说这个问题得先聊点其他东西:

 什么是BOM?  这里直接上图

看完红框中的大字大家是不是理解点什么了。对,微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。你微软搞这套,本意是好的,但奈何其它系统并不买账啊,linux就是其中之一,所以导出的文件没有BOM,所以在欲导出的内容加上utf-8的BOM,就解决文件打开乱码问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐