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 相关文章推荐
mysql数据库差异比较的PHP代码
Feb 05 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
怎样搭建PHP开发环境
Jul 28 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
php array_chunk()函数用法与注意事项
Jul 12 PHP
Yii框架Session与Cookie使用方法示例
Oct 14 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
JavaScript的Function详细
2006/11/14 Javascript
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
jquery 使用简明教程
2014/03/05 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
一波JavaScript日期判断脚本分享
2016/03/06 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
jQuery页面加载初始化的3种方法(推荐)
2016/06/02 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
Django自定义分页与bootstrap分页结合
2021/02/22 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
大学生实习期自我评价范文
2013/10/03 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
社会实践感言
2014/01/25 职场文书
教师申诉制度
2014/01/29 职场文书
保护环境建议书400字
2014/05/13 职场文书
啤酒节策划方案
2014/05/28 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
高中生逃课检讨书
2014/10/10 职场文书
golang特有程序结构入门教程
2021/06/02 Python
HTML中的表格元素介绍
2022/02/28 HTML / CSS
Golang并发工具Singleflight
2022/05/06 Golang
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang