php输出csv乱码怎么解决
内容导读
收集整理的这篇技术教程文章主要介绍了php输出csv乱码怎么解决,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1775字,纯文字阅读大概需要3分钟。
内容图文
在做项目时碰到使用外语的情况下,我们就会使用UTF-8编码。但是,在用PHP导出CSV文件时,如果写入的数据是使用UTF-8编码的日语、韩语之类的外文,就会出现乱码。
要解决PHP生成CSV文件的乱码问题,只需要在文件的开始输出BOM头,告诉windows CSV文件的编码方式,从而让Excel打开CSV时采用正确的编码。
相关推荐:《php教程》
什么是BOM
在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。
因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。Windows就是使用BOM来标记文本文件的编码方式的。
在所有内容输出之前
print(chr(0xEF).chr(0xBB).chr(0xBF));
几个UTF编码的BOM头
define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF));define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));
完整的代码:
header('Expires: 0');header('Cache-control: private');header('Cache-Control: must-revalidate, post-check=0, pre-check=0');header('Content-Description: File Transfer');header('Content-Encoding: UTF-8');header('Content-type: text/csv; charset=UTF-8');header('Content-Disposition: attachment;filename=Customers_Export.csv');echo "xEFxBBxBF"; // UTF-8 BOM// print(chr(0xEF).chr(0xBB).chr(0xBF));
以上就是php输出csv乱码怎么解决的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的php输出csv乱码怎么解决全部内容,希望文章能够帮你解决php输出csv乱码怎么解决所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。