首页 >后端开发 >PHP问题 > 正文

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

原创2020-08-17 10:43:0301649

解决乱码的方法: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表情等非主流字符。

以上就是utf8编码的php导出CSV乱码怎么解决?的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

  • 相关标签:utf8 php CSV
  • 相关文章

    相关视频


    网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
  • 专题推荐

    作者信息

    青灯夜游

    今天学习一小步,明天提升一大步

    最近文章
    php怎么判断有几位小数460
    php中转换首字母大写的函数是什么380
    Javascript怎么检查对象是否为空899
    推荐视频教程
  • ThinkPHP6.0公益直播课ThinkPHP6.0公益直播课
  • 《20天入门精通PHP》视频教程《20天入门精通PHP》视频教程
  • PHP快速操控Excel之PhpSpreadsheetPHP快速操控Excel之PhpSpreadsheet
  • 视频教程分类