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分页函数
Jul 08 PHP
文件系统基本操作类
Nov 23 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
图文介绍PHP添加Redis模块及连接
Jul 28 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
简单谈谈PHP中的trait
Feb 25 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 PHP
PHP实现的超长文本分页显示功能示例
Jun 04 PHP
PHP大文件切割上传功能实例分析
Jul 01 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 PHP
php实现自动生成验证码的实例讲解
Nov 17 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快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
React实现todolist功能
2020/12/28 Javascript
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Python删除Java源文件中全部注释的实现方法
2017/08/30 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
python 动态调用函数实例解析
2019/10/21 Python
python 实现两个线程交替执行
2020/05/02 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
extern是什么意思
2016/03/10 面试题
linux面试题参考答案(3)
2012/09/13 面试题
实习生自荐信范文分享
2013/11/27 职场文书
高中校园广播稿
2014/01/11 职场文书
入职担保书范文
2014/05/21 职场文书
家具商场的活动方案
2014/08/16 职场文书
北京颐和园导游词
2015/01/30 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
化工厂员工工作总结
2015/10/15 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python