2017年11月9日09:25:56

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

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

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

用法:

 // 导入:
$arr = CSV::import($filepath); // 导出:
$data = ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x]]];
CSV::export($data);
 <?php

 class CSV
{
public static $csvError = ''; public static function _SetError($error)
{
self::$csvError = $error;
} /**
* 读取csv文件成数组
* @param string $filePath 文件路径
* @return array|bool
*/
public static function import($filePath)
{
setlocale(LC_ALL, 'zh_CN'); if(!file_exists($filePath) || !is_readable($filePath)) {
self::_SetError('文件不存在或者不可读');
return FALSE;
} $rows = array();
$fp = fopen($filePath, 'rb');
while (!feof($fp)) { $row = str_replace(array("\r\n", "\r", "\n"), '', fgets($fp));
$rows[] = explode(',', iconv('GB2312', 'UTF-8', $row)); //简体中文编码转为 utf-8, gbk 兼容gb2312 }
return $rows;
} /**
* 输出 UTF-8 编码的csv文件
* @param array $data ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x], ....]]
* @return bool
*/
public static function export($data)
{
if (empty($data['filename']) || empty($data['list'])) {
self::_SetError('缺少参数filename/list');
return FALSE;
}
$filename = $data['filename']; //文件名 header("Expires: 0");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
// 强制下载
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
// disposition / encoding on response body
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary"); //设置utf-8 + bom ,处理汉字显示的乱码
echo(chr(0xEF).chr(0xBB).chr(0xBF)); //打开输出缓存
ob_start(); //打开输出流
$df = fopen("php://output", 'w'); //数据写入缓存
foreach ($data['list'] as $row) {
foreach ($row as $k => $v) {
is_numeric($v) && ($row[$k] .= "\t"); //防止变为科学计数法显示
}
fputcsv($df, $row);
} fclose($df);
echo ob_get_clean();
exit;
}
}

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. ASP.NET MVC 4 (十) 模型验证

    模型验证是在模型绑定时检查从HTTP请求接收的数据是否合规以保证数据的有效性,在收到无效数据时给出提示帮助用户纠正错误的数据. 显式模型验证 验证数据最直接的方式就是在action方法中对接收的数据验 ...

  2. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

    接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

  3. php制作圆形用户头像——自定义封装类源代码

    思路 使用图层的方法设计,共需要创建3个图像层 1.底层:最后生成的图像 2.真实用户头像:作为中间层,用户上传的真实头像图片 3.圆形蒙版:作为最上层,在蒙版中绘制圆形,并设置为透明 如图: 代码如 ...

  4. Kali Linux之常见后门工具介绍

    1.Meterpreter 它是Metasploit框架中功能强大的后渗透模块.可以通过Meterpreter的客户端执行攻击脚本,远程调用目标主机上运行的Meterpreter服务端. 命令 作用 ...

  5. [C++]猜数字游戏的提示(Master-Mind Hints,UVa340)

    [本博文非博主原创,思路与题目均摘自 刘汝佳<算法竞赛与入门经典(第2版)>] Question 例题3-4 猜数字游戏的提示(Master-Mind Hints,UVa340) 实现一个 ...

  6. Java中常见的锁分类以及对应特点

    对于 Java 锁的分类没有严格意义的规则,我们常说的分类一般都是依据锁的特性.锁的设计.锁的状态等进行归纳整理的,所以常见的分类如下: 公平锁和非公平锁:公平锁是多线程按照锁申请的顺序获取锁,非公平 ...

  7. Python 17 web框架&Django

    本节内容 1.html里面的正则表达式 2.web样式简介 3.Django创建工程 Html里的正则表达式 test 用来判断字符串是否符合规定的正则       rep.test('....')  ...

  8. 【blog】SpringMVC返回RSS格式的XML数据

    代码 import com.sun.syndication.feed.rss.Channel; import com.sun.syndication.feed.rss.Content; import ...

  9. Linux中的libc和glibc

    现在centos6.8-x64系统里的c标准库已经成了glibc,glibc取代了libc,c标准库的位置在/lib64/libc.so.6 以下为转载 一.libc库 Linux平台提供的C标准库包 ...

  10. Windows命令查看文件MD5,SHA1,SHA256 文件校验

    certutil -hashfile yourfilename.ext MD5 certutil -hashfile yourfilename.ext SHA1 certutil -hashfile ...