php导出CSV需要注意的一些tip

2016-12-20  本文已影响0人  不留余白

如有雷同,算你抄袭。

通过引入第三方类phpexcel可以很方便的导出excel,但是实践下来,生成excel的效率并不高,只是单纯的做数据分析用excel并不明智,最好还是用csv,导出csv的方法极简单,CSV是一种分隔的 文本文件,它使用逗号来分割值(许多CSV导入/导出工具的实现也允许使用其它的分隔符)。 简单的CSV实现可以禁止字段值中包含逗号或其它特殊字符如换行符。

我们只要简单几行代码就可以实现

function export_csv($filename,$data)

{

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');

echo $data;

}

$arr = array(

             array('name'=>'小明','age'=>20,'city'=>'北京'),

              array('name'=>'丽莎','age'=>15,'city'=>'河北'),

);

$str = "姓名,年龄,城市\n";//表头

foreach($arr as $row)

{

$str .= $row['name'].','.$row['age'].','.$row['city']."\n";

}

export_csv('测试csv',$str); //导出

以上代码就可以实现导出,但是我们发现导出的csv是乱码,所以我们需要做一次转码

这里不卖关子,直接贴出我目前为止遇到的需要做处理的字符

"\r\n", "\r", "\n",这几个都是换行符,不过滤掉会导致CSV乱行

"," 逗号在CSV中作为分隔符,也会导致乱行

"\"" 双引号这个问题是早上刚发现的,会导致csv换行失效,过滤掉吧

此外,

if (preg_match("/[\x7f-\xff]/", $str)) 这里判断是否匹配汉字,

如果是,我们将他转为gbk2312才能在csv中正常显示,

如果转完是个空字符串,我们将原字符串转成gbk格式,

做这一步是为了处理繁体字,繁体字需要转成gbk,否则不显示

function gb2312($str)

{

$str = str_replace(array("\r\n", "\r", "\n",",","\""), array("","","","&",""), $str);

if (preg_match("/[\x7f-\xff]/", $str))

{

$inconvStr = iconv('utf8',"gbk2312",$str);

$inconvStr = empty($inconvStr)?iconv('utf8',"gbk",$str):$inconvStr;

}

return $inconvStr;

}

以上 ,是本帖的核心内容,如有雷同,算你抄袭。

导报表遇到最棘手的问题莫过于,数据太多导致内存泄露或超出maxexcutetime,

希望下次可以与大家分享如何应对这些问题的方法。

上一篇下一篇

猜你喜欢

热点阅读