php 生成读取csv文件并解决中文乱码
csv其实是文本文件,但是里面的内容是利用逗号分隔的。
1. 生成csv文件
1 function new_csv($arr) 2 { 3 $string=""; 4 foreach ($arr as $key => $value) 5 { 6 foreach ($value as $k => $val) 7 { 8 $value[$k]=iconv('utf-8','gb2312',$value[$k]); 9 } 10 11 $string .= implode(",",$value)."\n"; //用英文逗号分开 12 } 13 $filename = date('Ymd').'.csv'; //设置文件名 14 header("Content-type:text/csv"); 15 header("Content-Disposition:attachment;filename=".$filename); 16 header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 17 header('Expires:0'); 18 header('Pragma:public'); 19 echo $string; 20 }
2.读取csv文件
网上许多封装的方法都有中文乱码问题,我这边顺手解决一下。
/* * 读取CSV文件 * @param string $file csv文件路径 */ function read_csv($file) { setlocale(LC_ALL, 'zh_CN');//linux系统下生效 $data = null;//返回的文件数据行 if (!is_file($file) && !file_exists($file)) { die('文件错误'); } $cvs_file = fopen($file, 'r'); //开始读取csv文件数据 $i = 0;//记录cvs的行 while ($file_data = fgetcsv($cvs_file)) { $i++; // if ($i == 1) { // continue;//过滤表头 // } $res = array(); if ($file_data[0] != '') { foreach ($file_data as $val){ $val = mb_convert_encoding($val, "UTF-8", "GBK"); $res[] = $val; } $data[$i] = $res; } } fclose($cvs_file); return $data; }
是否需要过滤表头自己选择,默认不过滤
如果还有中文乱码问题,那么用下面这个
function read_csv($file) { setlocale(LC_ALL, 'zh_CN');//linux系统下生效 $data = null;//返回的文件数据行 if (!is_file($file) && !file_exists($file)) { die('文件错误'); } $cvs_file = fopen($file, 'r'); //开始读取csv文件数据 $i = 0;//记录cvs的行 while ($file_data = fgetcsv($cvs_file)) { $i++; if ($file_data[0] != '') { $data[$i] = $file_data; } } fclose($cvs_file); return $data; }