PHP fwrite写入文件,记事本打开乱码

问题

写入文件的代码:fwrite($filePath, $data);

同事电脑的记事本默认编码是ANSI,打开文件中文显示乱码

我电脑的记事本默认编码是UTF-8,打开文件中文显示正常

WPS打开文件中文显示正常,Microsoft office打开文件中文乱码

解决方案

方案一:写入内容之前先写入BOM

fwrite($filePath, chr(0xEF).chr(0xBB).chr(0xBF));
fwrite($filePath, $data);

//或者

fwrite($filePath, chr(0xEF).chr(0xBB).chr(0xBF).$data);

根本原因请阅读:当文件没有BOM时,打开文件可能是乱码的原因

根本原因总结:写入文件时没有加BOM,有可能识别不出来编码方式是UTF-8,就会出现乱码

方案二:mb_convert_encoding()获取内容编码方式,mb_detect_encoding()把编码方式转为gbk。

网上说把编码方式转为UTF-8可行,试了还是会出现以上问题,不行的原因应该是方案一说的缺少BOM头

fwrite($filePath, mb_convert_encoding($data, 'gbk', mb_detect_encoding($data)));

为何转码为gbk可行的根本原因暂时没时间找了,以后再补充。知道的朋友可以留言一下

file_put_contents

如果是使用file_put_contents写入文件碰到乱码问题,解决方法相同

方案一:

file_put_contents($filePath,  chr(0xEF).chr(0xBB).chr(0xBF));
file_put_contents($filePath, $data);

//或者

file_put_contents($filePath, chr(0xEF).chr(0xBB).chr(0xBF).$data);

方案二:

file_put_contents($filePath, mb_convert_encoding($data, 'gbk', mb_detect_encoding($data)));

fputcsv

function write_to_csv($filePath, $list){
        $fp = fopen($filePath, 'w');

        fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));

        foreach ($list as $fields) {
            fputcsv($fp, $fields);
        }

        fclose($fp);
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值