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设计模式中的工厂模式
Jun 12 PHP
php+javascript的日历控件
Nov 19 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
php如何连接sql server
Oct 16 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP实现随机数字、字母的验证码功能
Aug 01 PHP
laravel 实现划分admin和home 模块分组
Oct 15 PHP
微信小程序和php的登录实现
Apr 01 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 curl基本操作详解
2013/07/23 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
JS作用域深度解析
2016/12/29 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
js实现html滑动图片拼图验证
2020/06/24 Javascript
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
python提取内容关键词的方法
2015/03/16 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python reduce()函数的用法小结
2017/11/15 Python
基于python生成器封装的协程类
2019/03/20 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
公司成立感言
2014/01/11 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
机械工程师岗位职责
2014/06/16 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python