utf8编码的php导出CSV乱码怎么解决?

发布时间:2025-08-22 点击:13
解决乱码的方法:1、使用iconv函数将utf8编码转码为gbk,语法“$str = iconv('utf-8', 'gbk//ignore', $str));”;2、在输出内容前先输出bom头,这样excel就可自动识别到是utf-8了。
推荐:《php视频教程》
其实需求是把数据导出到excel,很当然的想到大名鼎鼎的phpexcel这个库。这个库是很强大,就是比较占用内存,超过10万的数据,在web请求中基本是很难完成了。因此,使用原生php导出轻量的csv还是有需求的。
一般情况下,导出utf-8编码的常规内容到csv当中,用excel打开都是乱码,更别说一些非主流字符,或者是emoji表情。乱码,是因为在windows系统下,默认的excel是使用gbk编码解析的。现如今,编码哪还有不是使用utf-8的,真有,那也是大公司知名产品会为了省那点流量出有gbk等其他编码的版本,一般情况下都是使用utf-8的。
要解决乱码问题,php中做法一般是使用iconv函数进行转码为gbk,这样,默认的excel打开就不会有问题了。但对于emoji表情等主流字符,gbk并不能显示,转码失败直接为空了。可以添加//ignore标记进行忽略,这样只是忽略了它们,其他正常字符是能够保留的。
$str = iconv('utf-8', 'gbk//ignore', $str));这可以说是一种折中方案。能不能不转码直接输出utf-8?难道excel还不能自动识别utf-8进而使用utf-8来解码显示么?其实是可以的,只是它需要一个bom头(在非windows的世界里是没有这个东西的),有这个bom头它就能识别到是utf-8,否则识别不了用默认的gbk来处理,自然就是乱码了。如何正确输出所谓的bom头,看代码:
$fp = fopen('./test_csv.csv', 'a');fwrite($fp,chr(0xef).chr(0xbb).chr(0xbf));//输出bom头fputcsv($fp, ['标题']);fputcsv($fp, ['解决乱码']);fclose($fp);以上亲测,可以解决所谓乱码以及正常显示emoji表情等非主流字符。

ipv6转ipv4工具
即买送”:看起来像O2O?其实做的是农业B2B的生意
阿里云服务器与备案吗
超低价云服务器相关云计算内容
免备案学生云服务器是什么
超市积分会员卡系统定制便捷消费结算
腾讯云服务器收费问题
客户域名急转出-其他问题