php导出CSV需要注意的一些tip
如有雷同,算你抄袭。
通过引入第三方类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,
希望下次可以与大家分享如何应对这些问题的方法。