导出csv文件乱码,不读取数据库,不用PHPExcel组件
尝试着添加了 BOM 之后,中文乱码的问题有解决了。
添加 BOM 到 CSV 文件中
示例代码:
$file = fopen($export_file_path, 'w');
fwrite($file, chr(0xEF).chr(0xBB).chr(0xBF)); // 添加 BOM
foreach ($contens as $content) {
fputcsv($file, $content);
}
ExcellentExport.js的方法,利用base64下载文件。支持chrome ,opera,firefox. 于是决定拿来为我所用!
说明一下,这个js的好处是:一句js脚本,就能前台下载,完全无须后台。
但外国人不了解中文的csv用excel打开直接乱码。 但用记事本打开,再直接保存,或另存为ansi都可以让中文不乱码。
想到BASE64可以保存图片。那么我要是用这工具分别编码一下正确和乱码的文件不就行了。
于是用:http://www.fishlee.net/Tools/GetImageBase64Code 来试了下,结果真找到了不同。
记事本另存的正确结果:77u/5bqP5Y+3LOS/oeaBrw0K5ae
直接保存,无BOM头的结果:5bqP5Y+3LOS/oeaBrw0K5ae
哈哈!把代码改为:
'77u/'+ base64(toCSV)
|
,解决问题!
真是,4个字符折腾一天。真是只有4个字符。。。。。。。。
--------------------------------------
解释一下:ExcellentExport.js的思路,就是构造这样一个a标签:
<a target="_blank" href="data:application/csv;base64,5bqP5YNCg==" download="ok.csv" style="display: none;"><span>00</span></a>
把文字base64后,指定文件名,就可能通过<a>来前台下载文件了。完全无须后端。
header("Content-Type: application/vnd.ms-excel; charset=UTF-8"); //不一定有效,某些版本有可能依然乱码
- 没有评论