zi663227 发表于 2017-4-8 08:28:07

php导出csv文件乱码问题解决方法

  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 文件的语法约定。


实现代码如果

<?php
$str = "哈,哈,哈,哈";
$fp = fopen("a.csv","a");
//在写入数据之前先把bom头写到文件里
fwrite($fp,"\xEF\xBB\xBF");
//再写入数据 php程序员站
fwrite($fp,$str);
phperz.com
fclose($fp);
phperz.com
?>
  注:在写csv文件时确保php源码是utf-8,并且无BOM,并且没有输出任何内容。
  

BOM实际上挺烦人,如果你的网页(*.html)有BOM,在IE6.x下面打开会发现一神奇的空行,Firefox下却没有
  来源:http://www.i-felix.cn/blog/phpdao-chu-csvwen-jian-luan-ma-wen-ti-jie-jue-fang-fa-gai-si-de-wei-ruan
页: [1]
查看完整版本: php导出csv文件乱码问题解决方法