您好,欢迎访问一九零五行业门户网

php 生成csv mac下乱码

这篇文章主要介绍了php 生成csv mac下乱码 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
<?php $file_name = date('ymd', time()) . '.csv'; //设置文件名 header('content-type: application/vnd.ms-excel'); header('content-disposition: attachment;filename='.$file_name); header('cache-control: max-age=0'); $fp = fopen('php://output', 'a'); $row = [ 'name' => '测试', 'email' => 111111, 'mobile' => 22222, 'weixinid' => '微信号', ]; fwrite($fp,"\xef\xbb\xbf"); fputcsv($fp, $row);
php导出csv文件乱码问题解决方法
说 这个问题之前首先来说一下什么是csv文件?comma separator value(逗号分隔值)是也。常常用来数据转换的中间文件存在,比如:从mysql中导出数据到csv,导入csv到sqlserver中。在 linux下用php脚本从mysql数据库中将表的数据按照条件导出成csv,使用utf-8编码导出csv文件,打开后里边的中文成了乱码 (windows下csv文件默认与microsoft excel关联),用notepad++或者word打开正常,不过排版很乱。原因:bom惹的祸,微软惹的祸。
什么是bom?byte order mark(比特序标记)是也。
为 了识别 unicode 文件,microsoft 建议所有的 unicode 文件应该以 zero width nobreak space字符开头。这作为一个”特征符”或”字节顺序标记(byte-order mark,bom)”来识别文件中使用的编码和字节顺序(big-endian或little-endian),具体的对应关系见下表。
bytes encoding form
00 00 fe ff utf-32, big-endian
ff fe 00 00 utf-32, little-endian
fe ff utf-16, big-endian
ff fe utf-16, little-endian
ef bb bf utf-8
类unix系统中并没有使用 bom,因为它会破坏现有的 ascii 文件的语法约定。
实现代码如果
注:在写csv文件时确保php源码是utf-8,并且无bom,并且没有输出任何内容。
excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取。(这个bom是微软自己定义的一种文件头部协定,顾名思义存储在文件头部,存储内容就是标识文件编码的信息。)
而我们生成csv的平台不一定遵循微软的bom协议,导致如果输出非unicode编码的csv文件(例如utf-8),并且没有生成bom信息的话,excel自动按照unicode编码读取,就会出现乱码问题了。
掌握了这点相信乱码已经无法阻挡我们前进的步伐了:只需将非unicode编码的csv文件,用文本编辑器(推荐notepad++)打开并转换为带bom的编码形式(具体编码方式随意),问题解决。
相关推荐:
php生成唯一requestid类
实例详解php生成.csv后缀文件表格的方法
以上就是php 生成csv mac下乱码的详细内容。
其它类似信息

推荐信息