2017年11月9日09:25:56

根据项目实践总结的一个类文件, mac/win下没乱码

简体中文 默认从gb2312转到utf-8

https://gitee.com/myDcool/PHP-CSV

用法:

  1. // 导入:
  2. $arr = CSV::import($filepath);
  3.  
  4. // 导出:
  5. $data = ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x]]];
  6. CSV::export($data);
  1. <?php
  2.  
  3. class CSV
  4. {
  5. public static $csvError = '';
  6.  
  7. public static function _SetError($error)
  8. {
  9. self::$csvError = $error;
  10. }
  11.  
  12. /**
  13. * 读取csv文件成数组
  14. * @param string $filePath 文件路径
  15. * @return array|bool
  16. */
  17. public static function import($filePath)
  18. {
  19. setlocale(LC_ALL, 'zh_CN');
  20.  
  21. if(!file_exists($filePath) || !is_readable($filePath)) {
  22. self::_SetError('文件不存在或者不可读');
  23. return FALSE;
  24. }
  25.  
  26. $rows = array();
  27. $fp = fopen($filePath, 'rb');
  28. while (!feof($fp)) {
  29.  
  30. $row = str_replace(array("\r\n", "\r", "\n"), '', fgets($fp));
  31. $rows[] = explode(',', iconv('GB2312', 'UTF-8', $row)); //简体中文编码转为 utf-8, gbk 兼容gb2312
  32.  
  33. }
  34. return $rows;
  35. }
  36.  
  37. /**
  38. * 输出 UTF-8 编码的csv文件
  39. * @param array $data ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x], ....]]
  40. * @return bool
  41. */
  42. public static function export($data)
  43. {
  44. if (empty($data['filename']) || empty($data['list'])) {
  45. self::_SetError('缺少参数filename/list');
  46. return FALSE;
  47. }
  48. $filename = $data['filename']; //文件名
  49.  
  50. header("Expires: 0");
  51. header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
  52. // 强制下载
  53. header("Content-Type: application/force-download");
  54. header("Content-Type: application/octet-stream");
  55. header("Content-Type: application/download");
  56. // disposition / encoding on response body
  57. header("Content-Disposition: attachment;filename={$filename}");
  58. header("Content-Transfer-Encoding: binary");
  59.  
  60. //设置utf-8 + bom ,处理汉字显示的乱码
  61. echo(chr(0xEF).chr(0xBB).chr(0xBF));
  62.  
  63. //打开输出缓存
  64. ob_start();
  65.  
  66. //打开输出流
  67. $df = fopen("php://output", 'w');
  68.  
  69. //数据写入缓存
  70. foreach ($data['list'] as $row) {
  71. foreach ($row as $k => $v) {
  72. is_numeric($v) && ($row[$k] .= "\t"); //防止变为科学计数法显示
  73. }
  74. fputcsv($df, $row);
  75. }
  76.  
  77. fclose($df);
  78. echo ob_get_clean();
  79. exit;
  80. }
  81. }

PHP导入导出csv文件 Summer-CSV的更多相关文章

  1. Python与CSV文件(CSV模块)

    Python与CSV文件(CSV模块)   1.CSV文件 CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式.没有“CSV标准”,因此格式由许多读写的应用程序在操作上定义.缺乏标准意味 ...

  2. MYSQL导入导出.sql文件

    MYSQL导入导出.sql文件   一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...

  3. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

  4. (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

  5. Orcle导入导出dmp文件

    --Orcle导入导出dmp文件 --------------------------2013/12/06 导出表:   exp scott/tiger@mycon tables=(dept,emp) ...

  6. oracle导入导出 dmp文件

    oracle导入导出 dmp文件: 打开cmd窗口,在cmd窗口下,按照个人需要输入以下对应的命令: 1.imp 用户名/密码@网络服务名 file=XXX.dmp fromuser=XXX tous ...

  7. Python之文件读写(csv文件,CSV库,Pandas库)

    前言 一.Python文件读取 二.读取CSV文件 一.Python文件读取 1. open函数是内置函数之with操作 - 关于路径设置的问题斜杠设置成D:\\文件夹\\文件或是D:/文件夹/文件 ...

  8. Python的csv文件(csv模块)和ini文件(configparser模块)处理

    Python的csv文本文件(csv模块)和ini文本文件(configparser模块)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.csv文件 1>.CSV文件 ...

  9. ASP.NET Core导入导出Excel文件

    ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...

  10. C# CSV文件的导入导出以及datatable转化csv

    1.csv文件写入操作 首先,创建datatable对象: DataTable dt = new DataTable(); 添加列: dt.Columns.Add("name", ...

随机推荐

  1. Javascript的作用域和闭包(一)

    一.作用域是什么? 几乎所有的编程语言最基本的功能之一,就是能够存储变量的值,并且能访问和修改这些值. 修改变量值的过程我们通常在程序执行时,称为改变一个对象的状态.有了状态,让程序变得有非常有趣. ...

  2. Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization(第一周)深度学习的实践层面 (Practical aspects of Deep Learning)

    1. Setting up your Machine Learning Application 1.1 训练,验证,测试集(Train / Dev / Test sets) 1.2 Bias/Vari ...

  3. HTTP.SYS远程执行代码漏洞分析 (MS15-034 )

    写在前言:   在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.S ...

  4. npm与nrm

    npm npm是Node.js 平台的默认包(模块依赖)管理工具 Node Package Manager nrm 一个npm的源管理器(管理工具) 允许快速的在 npm 源间切换 两者关系 npm是 ...

  5. Tornado基本应用

    Tornado简介 Tornado有自己的socket(异步非阻塞,原生支持WebSocket),Django没有. Tornado的模板语言更接近Python风格,比Django要好理解. Demo ...

  6. SSM框架的搭建和测试(Spring+Spring MVC+MyBatis)

    Spring MVC:MVC框架,通过Model-View-Controller模式很好的将数据,业务与展现进行分离. MyBatis:数据持久层框架 我这里使用的是MyEclipse 2016 CI ...

  7. SQL Server进阶 遍历表的几种方法

    https://www.cnblogs.com/mcgrady/p/4182486.html

  8. JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法

    $(function(){ pushHistory(); window.addEventListener("popstate", function(e) { alert(" ...

  9. shell 命令使用笔记

    1.提取字符串中以.ddd结尾的ddd值 result=$(echo "chip86.500" | grep -Eo '\.[0-9]{1,}' | grep -Eo '[0-9] ...

  10. DAO层设计

    一.类图分析 二.参考文档 ( JavaBean中DAO设计模式介绍)(附:设计源码) 三.类图设计文件 百度云盘:https://pan.baidu.com/s/1i5xaS8P[Power Des ...