PHP 下载文件时自动添加bom头的方法实例


Posted in PHP onJanuary 10, 2014

首先弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。
不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB BF 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见)。这像是一个约定俗成的东西,当系统看到这玩意的时候,就会觉得你这个文件是UTF-8编码的。

如果你的接口是UTF-8的,你需要强制下载一个文件,比如csv.excel在默认情况(中文背景)下,认为csv是GB编码的,所以如果米有bom头,那你给用户呈现的文件,可能就是乱码了。

怎么加bom头呢?
在输出文件之前加上bom头就可以了:

                // 文件名
  $filename = "3water.com.net.csv";  header('Expires: ' . gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME'] + 10) . ' GMT');
  header('Cache-Control: max-age=10');
  //header('Content-Type: application/vnd.ms-excel; charset=utf-8');
  header('Content-Type: text/csv; charset=utf-8');
  header("Content-Disposition: attachment; filename={$filename}");
  // 如果结果中有提示信息,则把第一行输出改为提示信息文字
  $out = "xEFxBBxBF";// 加上bom头,系统自动默认为UTF-8编码
  if (!empty($extra['notice'])) {
   $out .= "{$extra['notice']}rn";
  }
  // 输出
  foreach ($table as $row) {
   $out .= implode(",", $row) . "rn";
  }
  /* if (mb_detect_encoding()($out) == 'UTF-8') {
   $out = iconv("UTF-8//IGNORE", "GBK", $out);
  } */
  echo $out;
PHP 相关文章推荐
聊天室php&mysql(四)
Oct 09 PHP
MySQL授权问题总结
May 06 PHP
php 高效率写法 推荐
Feb 21 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
Aug 06 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
php简单图像创建入门实例
Jun 10 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 #PHP
浅析php数据类型转换
Jan 09 #PHP
js和php邮箱地址验证的实现方法
Jan 09 #PHP
php检测用户是否用手机(Mobile)访问网站的类
Jan 09 #PHP
php获取文件内容最后一行示例
Jan 09 #PHP
php权重计算方法代码分享
Jan 09 #PHP
php实现分页工具类分享
Jan 09 #PHP
You might like
PHP 递归效率分析
2009/11/24 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
2019/02/15 PHP
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
求职推荐信
2013/10/28 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
婚礼新人答谢词
2015/01/04 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
爱心捐助活动总结
2015/05/09 职场文书
六一亲子活动感想
2015/08/07 职场文书
nginx之queue的具体使用
2022/06/28 Servers