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

这篇博客主要讨论了PHP在写入或生成CSV文件时遇到的乱码问题。作者提到,即使尝试更改编码,乱码问题仍然存在。问题根源在于BOM(Byte Order Mark),当文件开头包含BOM时,可能导致文件在某些环境下显示为乱码。解决方案是在PHP代码中正确地添加或移除BOM头,以确保文件以正确的UTF-8格式无BOM写入。
摘要由CSDN通过智能技术生成

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(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值