实战PHP导出Excel-CSV文件

实战PHP导出Excel-CSV文件

导出后的效果


先给各位看一下导出的效果,而后再进行代码分析

clipboard.png
完全都是按照数据库排列的~非常ok!~
下面我们进行代码分解

实战代码

导出CSV处理流程:

  • 读取学生信息表

  • 循环记录构建逗号分隔的字段信息

  • 设置header信息

  • 导出文件(下载)到本地

博主历来都是抱着开源精神,那么就直接贴代码,废话不多说了!

<?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写出来后我会放给大家!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值