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 相关文章推荐
火车头采集器3.0采集图文教程
Mar 17 PHP
php+mysql分页代码详解
Mar 27 PHP
PHP调用Twitter的RSS的实现代码
Mar 10 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
PHP实现的浏览器检查类
Apr 11 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
Nov 05 PHP
php curl常用的5个经典例子
Jan 20 PHP
php分页查询的简单实现代码
Mar 14 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 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中使用XML
2006/10/09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
很让人受教的 提高php代码质量36计
2012/09/05 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 机器学习库 NumPy入门教程
2018/04/19 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
秋天的图画教学反思
2014/05/01 职场文书
个人总结与自我评价
2014/09/18 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
房贷工资证明范本
2015/06/12 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
Redis Cluster 集群搭建你会吗
2021/08/04 Redis