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 计划任务 检测用户连接状态
Mar 29 PHP
深入php之规范编程命名小结
May 15 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
Jun 02 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
深入理解PHP变量的值类型和引用类型
Oct 21 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
PHP Trait功能与用法实例分析
Jun 03 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简单获取多个checkbox值的方法
2016/06/13 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
2010/10/29 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
深入解析Python小白学习【操作列表】
2019/03/23 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
财产保全担保书范文
2014/04/01 职场文书
继承公证书
2014/04/09 职场文书
校庆团日活动总结
2014/08/28 职场文书
企业年检委托书范本
2014/10/14 职场文书
大学生在校表现评语
2014/12/31 职场文书
挂职个人工作总结
2015/03/05 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
详解Python中的进程和线程
2021/06/23 Python
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android