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 中的str_replace 函数总结
Apr 27 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
PHP的PSR规范中文版
Sep 28 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
给ECShop添加最新评论
Jan 07 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
php 函数使用可变数量的参数方法
May 02 PHP
php pdo连接数据库操作示例
Nov 18 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伪静态写法附代码
2008/06/20 PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
2016/02/23 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
微信小程序 UI与容器组件总结
2017/02/21 Javascript
js实现鼠标跟随运动效果
2020/08/02 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Python绘制七段数码管实例代码
2017/12/20 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
python多进程并行代码实例
2019/09/30 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
2015年煤矿安全工作总结
2015/05/23 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技