csv导出的时候会有一个问题:内容中有换行的话,可能会导致数据排版错乱,所以需要使用标准的fputcsv()进行输出,这样可以很好的避免这个问题,或者是将内容中的换行转换成指定的一个字符也可以有效解决,下面是参照网上找的csv导出文件写的一个导出方法,具体思路跟着备注走就好了
注意:涉及到中文的地方,一定要gbk转码,否则会乱码
public static function export($head, $body, $name = null) { try { //设置内存占用 set_time_limit(0); ini_set('memory_limit', '512M'); //为fputcsv()函数打开文件句柄 $output = fopen('php://output', 'w') or die("can't open php://output"); //告诉浏览器这个是一个csv文件 header("Content-Type: application/csv"); header("Content-Disposition: attachment; filename=$name.csv"); //输出表头 foreach ($head as $i => $v) { //CSV的Excel支持GBK编码,一定要转换,否则乱码 $head[$i] = iconv('utf-8', 'gbk', $v); } fputcsv($output, $head); //输出每一行数据到文件中 foreach ($body as $e) { foreach ($e as &$item) { // 将数据中自带的换行替换成 句号“。”
$item = str_replace([" ", " ", " "],'。',$item);
$item = "="".iconv('utf-8', 'gbk', $item)."""; } //输出内容 fputcsv($output, array_values($e)); } //关闭文件句柄 fclose($output) or die("can't close php://output"); exit; } catch (Exception $e) { return $e->getMessage(); } }
同事的一种写法:直接echo出数据
public static function exportCsv($header,$data,$name) { //csv导出 $name = iconv('utf-8','gbk',$name); $filename = $name.'.csv'; header("Content-type:text/csv"); header("Content-Disposition:attachment;filename=".$filename); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Expires:0'); header('Pragma:public'); $body = iconv('utf-8','gbk',$header); //数据处理 foreach ($data as $k => $v) { foreach ($v as &$item) { $item = str_replace([" ", " ", " "],'。',$item); $item = "="".iconv('utf-8','gbk',$item)."""; $body .= $item.","; } rtrim($body,','); $body .= " "; } echo $body; exit; }