问题
写入文件的代码: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)));
|