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 日常开发小技巧
Sep 23 PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
PHP自动生成后台导航网址的最佳方法
Aug 27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
分享php邮件管理器源码
Jan 06 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP7新增函数
Mar 09 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP学习之整理字符串
2011/04/17 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
javascript 必知必会之closure
2009/09/21 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
js模拟微博发布消息
2017/02/23 Javascript
js 调用百度分享功能
2017/02/27 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
使用graphics.py实现2048小游戏
2015/03/10 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
Python生成器generator原理及用法解析
2020/07/20 Python
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
普通大学毕业生自荐信
2013/11/04 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
大学生励志演讲稿
2014/04/25 职场文书
实名检举信范文
2015/03/02 职场文书
军训后的感想
2015/08/07 职场文书
公司晚宴祝酒词
2015/08/11 职场文书
汉语拼音教学反思
2016/02/22 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
Java spring定时任务详解
2021/10/05 Java/Android
vue封装数字翻牌器
2022/04/20 Vue.js