基于PHP导出Excel的小经验 完美解决乱码问题


Posted in PHP onJune 10, 2013

我在PHP项目里要求把数据导出为Excel,并且数据中包含中文.
网上大概了解一下可是使用PHPExcel,可是相对我的需求,这个框架太复杂了.于是还是想找找简单做法.
网上发现其实最简单可以这样写,但问题是这种做法中文的编码不可靠..

<?php 
 header("Content-type:application/vnd.ms-excel"); 
 header("Content-Disposition:attachment;filename=export_data.xls"); 
 echo   "姓名"."\t";  
 echo   "繁?"."\t";  
 echo   "博客"."\t";  
 echo   "\n";  
 echo   "jason"."\t";  
 echo   "@"."\t";  
 echo   "javaeye"."\t";  
 ?>

有些同学会想到header加入字符集
header("Content-type:application/vnd.ms-excel;charset=UTF-8");

问题: 这里只是告诉浏览器要选什么字符集查看,最终我的需求还是要生成xls文件.
当然.有些同学还会想到用iconv转码.
echo iconv("当前编码","GB18030","此博客来源于javaeye,by jason");

问题: 这样文件里的汉字编码就GB18030,可是Excel这么知道用什么编码打开呢?只能完全依赖OS默认.可是如果碰到繁体BIG5这么办,还是会乱码. 所以还是不靠谱.
最后我采用phpMyAdmin的做法.用HTMLExcel, HTML我们比较熟悉,格式如下.
<html xmlns:o="urn:schemas-microsoft-com:office:office" 
 xmlns:x="urn:schemas-microsoft-com:office:excel" 
 xmlns="http://www.w3.org/TR/REC-html40"> 
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 <html> 
     <head> 
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" /> 
         <style id="Classeur1_16681_Styles"></style> 
     </head> 
     <body> 
         <div id="Classeur1_16681" align=center x:publishsource="Excel"> 
             <table x:str border=0 cellpadding=0 cellspacing=0 width=100% style="border-collapse: collapse"> 
                 <tr><td class=xl2216681 nowrap>1234</td><td class=xl2216681 nowrap>Robbin会吐口水</td></tr> 
                <tr><td class=xl2216681 nowrap>5678</td><td class=xl2216681 nowrap>javaeye网站</td></tr> 
             </table> 
         </div> 
     </body> 
 </html>

这下可以直接echo了,又不需要iconv转码,只要设置好HTML里的Content-type(这里用的是UTF-8),是不是有舒服的感觉呢? 当然header还是要加上
header("Content-type:application/vnd.ms-excel"); 
 header("Content-Disposition:attachment;filename=export_data.xls");

一点小经验和各位同学分享一下..
PHP 相关文章推荐
PHP下对数组进行排序的函数
Aug 08 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
Nov 02 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
php中的观察者模式简单实例
Jan 20 PHP
四个常见html网页乱码问题及解决办法
Sep 08 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 #PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 #PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 #PHP
php防注入,表单提交值转义的实现详解
Jun 10 #PHP
PHP获取当前页面完整URL的实现代码
Jun 10 #PHP
如何判断php数组的维度
Jun 10 #PHP
joomla jce editor 解决上传中文名文件失败问题
Jun 09 #PHP
You might like
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
JS array 数组详解
2009/03/22 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python中的django是做什么的
2020/07/31 Python
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
一名老师的自我评价
2014/02/07 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
消防安全承诺书
2014/05/22 职场文书
军训口号
2014/06/13 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
毕业生党员个人总结
2015/02/14 职场文书
五年级作文之学校的四季
2019/12/05 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
在Python中如何使用yield
2021/06/07 Python