基于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调用三种数据库的方法(1)
Oct 09 PHP
PHP脚本的10个技巧(2)
Oct 09 PHP
如何实现给定日期的若干天以后的日期
Oct 09 PHP
php循环输出数据库内容的代码
May 24 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
浅谈php7的重大新特性
Oct 23 PHP
phalcon框架使用指南
Feb 23 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
Jul 07 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 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
重置版宣传动画
2020/04/09 魔兽争霸
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
php桌面中心(一) 创建数据库
2007/03/11 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
Python模块学习 datetime介绍
2012/08/27 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
postman传递当前时间戳实例详解
2019/09/14 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
校长岗位职责
2013/11/26 职场文书
离婚财产处理协议书
2014/09/30 职场文书
2014年教务处工作总结
2014/12/03 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
总经理岗位职责范本
2015/04/01 职场文书
素质拓展训练感想
2015/08/07 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
golang语言指针操作
2022/04/14 Golang