PHP 写入/生成 csv 文件乱码解决
1、PHP写入/生成 csv 文件的过程中遇到了生成文件乱码的情况,不论是使用fwrite还是file_put_contents写入。
2、首先尝试改变编码,发现还是乱码
3、想起来之前遇到过因 BOM 头导致程序文件不能运行的问题,查找关于 BOM 头的信息
BOM
在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。
不仅限于 记事本保存的文件,只要在文件的开口包含了“EF BB BF” 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见)。这像是一个约定俗成的东西,当系统看到这玩意的时候,就会觉得你这个文件是UTF-8编码的。
这就是为什么当文件没有BOM时,你给用户呈现的文件就可能是乱码的原因了。
PS : 你可以将BOM理解成HTML中的charset属性和XML中的encoding属性,起到一个标识作用。
方案
1、如何在PHP中输出BOM?
在文件写入最初的地方输出:
echo (chr(