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 }
生成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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM