在php编程中,经常会导出数据为excel或csv文件,不过为了操作方便,大多时候我们会用php导出csv文件。

CSV,Comma Separator Value,常常用来数据转换的中间文件存在。

使用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),具体的对应关系见下表。

BytesEncoding Form00 00 FE FFUTF-32

big-endianFF FE 00 00UTF-32

little-endianFE FFUTF-16

big-endianFF FEUTF-16

little-endianEF BB BFUTF-8

Unix系统中并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。

php源码文件是用NotePad++生成的,在Centos下执行,格式为:以UTF-8无BOM格式编码,因此要想导出Microsoft Excel可以正常显示的UTF-8的CSV文件,需要显式的输出BOM(EF BB BF,上表的最后一种类型),然后再输出Mysql中的有效数据。

实现如下的php函数:

复制代码 代码示例:

/**

* @param $file_name string 要导出的文件名,比如:mail-list.csv

* @param $content string 要输出的csv格式的数据,用逗号分隔各字段

* @return null

*/

function output_csv($file_name,$content)

{

$content = "\xEF\xBB\xBF".$content; //添加BOM

if( empty( $file_name ) )

{

$file_name = date("Ymd")."csv";

}

header( "Cache-Control: public" );

header( "Pragma: public" );

header( "Content-type: text/csv" ) ;

header( "Content-Dis; filename={$file_name}" ) ;

header( "Content-Length: ". strlen( $content ) );

echo $content;

exit;

}

?>

总结:

1,output_csv函数使用前,确保php源码是utf-8,并且无BOM,并且没有输出任何内容。

2,BOM实际上挺烦人,如果网页(*.html)有BOM,在IE6.x下打开会发现空行,Firefox下没有。

php 导出mysql csv 乱码_php导出csv文件打开乱码的解决方法相关推荐

  1. sql导出oracle错误12154,Oracle导dmp文件ORA-12154报错解决方法

    Oracle导dmp出现文件ORA-12154: TNS: 无法解析指定的连接标识符解决方案 其实TNS无法解析是Oracle操作里经常遇到的问题,原因有二: (1)Oracle服务器没有装好(一般不 ...

  2. mysql装完是什么样儿的_Win7系统安装MySQL之后找不到指定文件与服务如何解决?...

    Win7系统在安装MySQL之后服务或者指定文件都找不到怎么办?不少用户在电脑中安装MySQL之后,却遇到了找不到指定文件或者找不到服务的情况,那么为什么会出现这个问题呢?接下来小编就为大家分享安装m ...

  3. 0x80070003系统找不到指定路径_Win7系统安装MySQL之后找不到指定文件与服务如何解决?...

    Win7系统在安装MySQL之后服务或者指定文件都找不到怎么办?不少用户在电脑中安装MySQL之后,却遇到了找不到指定文件或者找不到服务的情况,那么为什么会出现这个问题呢?接下来就为大家分享安装mys ...

  4. csv文件打开乱码解决

    csv文件打开乱码解决 文章目录 csv文件打开乱码解决 前言 解决方法 前言 公司需要我导出csv的格式进行整理,如下图所示 我导出后用Excel打开却变成了乱码 解决方法 csv格式的文件可以使用 ...

  5. MySQL导出到excle显示不了_mysql导出select语句结果到excel文件遇到问题及解决方法_MySQL...

    一.导出数据外部 1)mysql连接+将查询结果输出到文件.在命令行中执行(windows的cmd命令行,mac的终端) mysql -hxx -uxx -pxx -e "query sta ...

  6. CSV文件打开乱码解决方法

    CSV文件打开乱码解决方法 问题: CSV文件通常可以用Excel打开,但有时会碰到直接用Excel打开是出现中文乱码的问题,如下图所示: 解决方法: CSV文件乱码问题一般是编码方式的问题,选择以记 ...

  7. scrapy生成csv文件空行、csv文件打开乱码(解决方案)

    scrapy生成csv文件空行.csv文件打开乱码(解决方案) 参考文章: (1)scrapy生成csv文件空行.csv文件打开乱码(解决方案) (2)https://www.cnblogs.com/ ...

  8. Python写入到csv文件存在空行的解决方法

    Python写入到csv文件存在空行的解决方法 参考文章: (1)Python写入到csv文件存在空行的解决方法 (2)https://www.cnblogs.com/crooswang/p/5953 ...

  9. MySQL 查询速度慢与性能差的原因与解决方法

    MySQL 查询速度慢与性能差的原因与解决方法 更新时间:2019年09月26日 18:05:47 作者:Microtiger 随着网站数据量与访问量的增加,MySQL 查询速度慢与性能差的问题就日渐 ...

  10. mysql转储导入错误_数据库MYSQL导入SQL文件时错误的解决方法(2种)

    从服务器数据库用navicate导出的.sql文件后再用navicate导入到本地的数据库中会出现若干条记录的错误: [Err] 1064 – You have an error in your SQ ...

最新文章

  1. 用友云平台,真正的云原生架构,加速云应用落地
  2. Android -- View移动的六种方法
  3. windows2008系统启动weblogic报错
  4. phpHiveAdmin开发两个月记录
  5. C++末尾匹配(C与C++解决)
  6. 算法分析与设计——分治法最近点对
  7. 面向对象3(final、static、instanceof、向上/向下转型、初始化次序)
  8. 电气期刊论文实现:考虑斜坡约束、开停机时间约束的电力机组组合(程序讲解)
  9. 最值得程序员get的30本行业干货
  10. [pytorch] Pytorch入门
  11. 最重要的 Java EE 最佳实践
  12. hdfs文件系统无法在网页上显示
  13. RabbitMQ中Confirm确认与Return返回消息详解(八)
  14. VC++多线程--进程间通信
  15. Elasticsearch安装与分词插件、用户词典、同义词配置等
  16. 有趣的微分方程传之可分离变量的微分方程
  17. 使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)
  18. angular报$injector / unpr的错误
  19. 【实验技术笔记】融合基因 + 长片段基因 + 突变基因 表达载体构建
  20. LSM 树(Log-Structured Merge-Tree) 原理

热门文章

  1. Degenerate Dimensions(原创)
  2. Java毕设项目中药材电子商务平台计算机(附源码+系统+数据库+LW)
  3. Arduino学习笔记(7)- 多线程技术
  4. 教程5 Vue3常用内置指令(插值、v-bind、v-model、v-on、v-text、v-html、v-once、v-pre、v-cloak、v-slot)
  5. 基于Kotlin ShareFlow封装事件总线EventBus
  6. 【秃头系列】-【本科生毕设论文格式Word】自动生成图表公式题注并交叉引用
  7. 二进制补码为什么是原码取反加一
  8. 百度地图显示无法连接服务器,百度地图为什么打不开该怎么解决
  9. 2022款红旗H5安装百度地图使用北斗导航
  10. vue+Element+select满足条件后将选择框清空