實戰PHP導出Excel-CSV文件

實戰PHP導出Excel-CSV文件

導出後的效果php


先給各位看一下導出的效果,然後再進行代碼分析前端

clipboard.png
徹底都是按照數據庫排列的~很是ok!~
下面咱們進行代碼分解mysql

實戰代碼sql

導出CSV處理流程:數據庫

  • 讀取學生信息表微信

  • 循環記錄構建逗號分隔的字段信息函數

  • 設置header信息post

  • 導出文件(下載)到本地fetch

博主從來都是抱着開源精神,那麼就直接貼代碼,廢話很少說了!ui

<?php
require 'data/config.php';//豬都知道是引入數據庫
 $result = mysql_query("select * from member order by id asc");   //查詢你須要導出的數據
 $str = "uuid,nickname,ads,sex,phone,pic,balance,time,password,address,info,card,card_time,cid\n"; //這裏呢就是導出的csv文件的表頭  切記最後的換行符別落下
 $str = iconv('utf-8','GB18030',$str); //利用iconv()函數轉換一下字符編碼。關於編碼問題,我在文章最後給你們詳細介紹  
    while($row=mysql_fetch_array($result))  //遍歷數據 
    {   
        $nickname = iconv('utf-8','GB18030',$row['nickname']); //中文轉碼 由於博主導出的是微信用戶表,各類奇葩的暱稱都有,因此須要轉碼  
        $address = iconv('utf-8','GB18030',$row['address']);  //中文轉碼   
        $info = iconv('utf-8','GB18030',$row['info']);  //中文轉碼 
        $str .= $row['uuid'].",".$nickname.",".$row['ads'].",".$row['sex'].",".$row['phone'].",".$row['pic'].",".$row['balance'].",".$row['time'].",".$row['password'].",".$address.",".$info.",".$row['card'].",".$row['card_time'].",".$row['cid']."\n";  導出的數據排列,對應表頭,切記最後的換行符別落下
    }   
    $filename = 'member.csv'; //設置文件名   //不要直接用date()函數。不然會報錯的;
    export_csv($filename,$str); //執行導出   

//這個函數是設置header信息。照抄便可無需修改!
    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;   
}  
?>

關於字符編碼的解釋(認真看喲)

博主最開始導出的文件的時候轉換成gb2312編碼,結果某些中文符號亂碼
結果博主不甘心,又度娘了一下,網友說,GBK編碼更全更強大,好的,再一次失敗,都一個鳥樣!
而後博主鬱悶了,就問了對面的前端小夥,問他那個字符集編碼最全,無奈的是他告訴我是unicode(UTF-8)
固然我也知道unicode固然全。但是遇到中文就變孫子了,不行你試試
後來又繼續百度了一下中文編碼的知識,瞭解到最強的應該是GB18030。下給你們一些信息參考

國家標準GB18030-2005《信息技術 中文編碼字符集》是我國繼GB2312-1980和GB13000.1-1993以後最重要的漢字編碼標準,是我國計算機系統必須遵循的基礎性標準之一。
GB18030有兩個版本:GB18030-2000和GB18030-2005。GB18030-2000是GBK的取代版本,它的主要特色是在GBK基礎上增長了CJK統一漢字擴充A的漢字。GB18030-2005的主要特色是在GB18030-2000基礎上增長了CJK統一漢字擴充B的漢字。

下面這段摘抄自知乎

做者:Tuxify

連接:https://www.zhihu.com/questio...
來源:知乎
著做權歸做者全部,轉載請聯繫做者得到受權。

1 GB2312-80

GB 2312 或 GB 2312-80 是中國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》,又稱 GB 0,由中國國家標準總局發佈,1981 年 5 月 1 日實施。GB 2312 編碼通行於中國大陸;新加坡等地也採用此編碼。中國大陸幾乎全部的中文系統和國際化的軟件都支持 GB 2312。

GB 2312 標準共收錄 6763 個漢字,其中一級漢字 3755 個,二級漢字 3008 個;同時收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西裏爾字母在內的 682 個字符。
GB 2312 的出現,基本知足了漢字的計算機處理須要,它所收錄的漢字已經覆蓋中國大陸99.75% 的使用頻率。
對於人名、古漢語等方面出現的罕用字,GB 2312 不能處理,這致使了後來 GBK 及 GB 18030 漢字字符集的出現。

GB 2312 對任意一個圖形字符都採用兩個字節表示,並對所收漢字進行了「分區」處理,每區含有 94 個漢字/符號,分別對應第一字節和第二字節。這種表示方式也稱爲區位碼。
01-09 區爲特殊符號。
16-55 區爲一級漢字,按拼音排序。
56-87 區爲二級漢字,按部首/筆畫排序。
10-15 區及 88-94 區則未有編碼。
GB 2312 的編碼範圍爲 2121H-777EH,與 ASCII 有重疊,通行方法是將 GB 碼兩個字節的最高位置 1 以示區別。

2 GBK

GBK 即漢字內碼擴展規範,K 爲漢語拼音 Kuo Zhan(擴展)中「擴」字的聲母。英文全稱 Chinese Internal Code Specification。

GBK 共收入 21886 個漢字和圖形符號,包括:
GB 2312 中的所有漢字、非漢字符號。
BIG5 中的所有漢字。
與 ISO 10646 相應的國家標準 GB 13000 中的其它 CJK 漢字,以上合計 20902 個漢字。
其它漢字、部首、符號,共計 984 個。
GBK 向下與 GB 2312 徹底兼容,向上支持 ISO 10646 國際標準,在前者向後者過渡過程當中起到的承上啓下的做用。

GBK 採用雙字節表示,整體編碼範圍爲 8140-FEFE 之間,首字節在 81-FE 之間,尾字節在 40-FE 之間,剔除 XX7F 一條線。GBK 編碼區分三部分:
漢字區 包括
GBK/2:OXBOA1-F7FE, 收錄 GB 2312 漢字 6763 個,按原序排列;
GBK/3:OX8140-AOFE,收錄 CJK 漢字 6080 個;
GBK/4:OXAA40-FEAO,收錄 CJK 漢字和增補的漢字 8160 個。
圖形符號區 包括
GBK/1:OXA1A1-A9FE,除 GB 2312 的符號外,還增補了其它符號
GBK/5:OXA840-A9AO,擴除非漢字區。
用戶自定義區
GBK 區域中的空白區,用戶能夠本身定義字符。

3 GB18030

GB 18030,全稱:國家標準 GB 18030-2005《信息技術中文編碼字符集》,是中華人民共和國現時最新的內碼字集,是 GB 18030-2000《信息技術信息交換用漢字編碼字符集基本集的擴充》的修訂版。
GB 18030 與 GB 2312-1980 和 GBK 兼容,共收錄漢字70244個。
與 UTF-8 相同,採用多字節編碼,每一個字能夠由 1 個、2 個或 4 個字節組成。
編碼空間龐大,最多可定義 161 萬個字符。
支持中國國內少數民族的文字,不須要動用造字區。
漢字收錄範圍包含繁體漢字以及日韓漢字
GB 18030 編碼是一二四字節變長編碼。
單字節,其值從 0 到 0x7F,與 ASCII 編碼兼容。
雙字節,第一個字節的值從 0x81 到 0xFE,第二個字節的值從 0x40 到 0xFE(不包括0x7F),與 GBK 標準兼容。
四字節,第一個字節的值從 0x81 到 0xFE,第二個字節的值從 0x30 到 0x39,第三個字節從0x81 到 0xFE,第四個字節從 0x30 到 0x39。

ok bye see you!等上傳CSV寫出來後我會放給你們!

相關文章
相關標籤/搜索