PHP 写入/生成 csv 文件乱码解决

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(0xEF).chr(0xBB).chr(0xBF));

2、 在生成文件的时候,可能是下面两种:

fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF).$content);
file_put_contents($file, chr(0xEF).chr(0xBB).chr(0xBF).$content);

参考链接:PHP写入生成csv或txt文件乱码解决方案

你可能感兴趣的:(php)