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

我在PHP项目里要求把数据导出为Excel,并且数据中包含中文.
网上大概了解一下可是使用PHPExcel,可是相对我的需求,这个框架太复杂了.于是还是想找找简单做法.
网上发现其实最简单可以这样写,但问题是这种做法中文的编码不可靠..
<div class="codetitle"><a style="CURSOR: pointer" data="39310" class="copybut" id="copybut39310" onclick="doCopy('code39310')"> 代码如下:

<div class="codebody" id="code39310">
<?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加入字符集
<div class="codetitle"><a style="CURSOR: pointer" data="31024" class="copybut" id="copybut31024" onclick="doCopy('code31024')"> 代码如下:
<div class="codebody" id="code31024">
header("Content-type:application/vnd.ms-excel;charset=UTF-8");

<FONT style="COLOR: #ff0000">问题: 这里只是告诉浏览器要选什么字符集查看,最终我的需求还是要生成xls文件.

当然.有些同学还会想到用iconv转码.
<div class="codetitle"><a style="CURSOR: pointer" data="8998" class="copybut" id="copybut8998" onclick="doCopy('code8998')"> 代码如下:
<div class="codebody" id="code8998">
echo iconv("当前编码","GB18030","此博客来源于javaeye,by jason");

<FONT style="COLOR: #ff0000">问题: 这样文件里的汉字编码就GB18030,可是Excel这么知道用什么编码打开呢?只能完全依赖OS认.可是如果碰到繁体BIG5这么办,还是会乱码. 所以还是不靠谱.

最后我采用PHPMyAdmin的做法.用HTMLExcel,HTML我们比较熟悉,格式如下.
<div class="codetitle"><a style="CURSOR: pointer" data="48519" class="copybut" id="copybut48519" onclick="doCopy('code48519')"> 代码如下:<div class="codebody" id="code48519">
<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"&gt;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;



<style id="Classeur1_16681_Styles">


<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>1234</td>Robbin会吐口水</td></tr>
<tr>5678</td>javaeye网站</td></tr>
</table>




这下可以直接echo了,又不需要iconv转码,只要设置好HTML里的Content-type(这里用的是UTF-8),是不是有舒服的感觉呢? 当然header还是要加上
<div class="codetitle"><a style="CURSOR: pointer" data="29956" class="copybut" id="copybut29956" onclick="doCopy('code29956')"> 代码如下:<div class="codebody" id="code29956">
header("Content-type:application/vnd.ms-excel");
header("Content-disposition:attachment;filename=export_data.xls");

一点小经验和各位同学分享一下..

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...