PHP生成CSV文件在Excel中乱码是怎么回事?
Admin 2022-10-10 群英技术资讯 531 次浏览
PHP生成UTF-8编码的CSV文件用Excel打开乱码?
原因:是由于输出的CSV文件中没有BOM。
什么是BOM?
在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
如何在PHP中输出BOM?
在所有内容输出之前
print(chr(0xEF).chr(0xBB).chr(0xBF));
示例代码:
<?php function writeCsvToFile($file,array $data){ $fp = fopen($file, 'w'); //Windows下使用BOM来标记文本文件的编码方式 fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF)); foreach ($data as $line) { fputcsv($fp, $line); } fclose($fp); }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP如何实现用户登录注册功能?登录注册功能是很多网站都会使用到的,因此这篇文章就给大家介绍一个实现简单注册页面的代码,下图是实现效果,文本有较详细的过程及代码,有需要的朋友可以参考一下。
对象输出:__toString()当一个对象被当做字符串进行输出时(echo,print),会调用__toString()方法<?php//输出对象classPerson{//属性public$name;private$age;//方法publicfunction
在laravel中,“DB::raw()”方法用于复杂的sql查询,该方法能够将查询到的结果集当成一个临时表,然后使用laravel的查询构造器语法进行分页处理,语法为“DB::raw('函数或者字段');”。
swoole可以使用心跳检测,使用起来非常简单,只需要配置heartbeat_check_interval,heartbeat_idle_time就可以了。
模板方法模式模式是一种行为型模式,它定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以在不改变一个算法的结构的情况下重定义该算...
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008