php 生成读取csv文件并解决中文乱码

南楼画角 提交于 2020-04-28 22:29:03

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 }
生成csv文件

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;
}
读取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 ($file_data[0] != '') {
                $data[$i] = $file_data;
            }
        }
        fclose($cvs_file);
        return $data;
    }
读取csv

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!