因为需求简单,只需要导出成表格,所以是这么写的,通过发送header头实现文件下载(多说一句,header中可以实现的功能很多,有兴趣的童鞋可以深度发掘)。一开始没什么问题,结果游戏上线几天,玩家数据多起来之后,再想将数据导出,就这样了:
而且至今为止,我都不知道为什么数据量大之后就会出现这种情况,难道iconv处理的字符串长度有上限?没有去深究。
问题出来了就要解决,过程就不提了,无非谷歌,实践,再谷歌,再实践,直接上代码:
header("Content-Disposition:filename=".$filename.".csv");
$strexport= "xEFxBBxBF".$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,就解决了文件打开乱码问题。
本文发布于:2024-01-28 04:05:11,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063859204646.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |