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 Cookie的一个使用注意点
Nov 08 PHP
网页游戏开发入门教程二(游戏模式+系统)
Nov 02 PHP
php 魔术函数使用说明
Feb 21 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
php实现rc4加密算法代码
Apr 25 PHP
解析php入库和出库
Jun 25 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
php UNIX时间戳用法详解
Feb 16 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 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
smarty实例教程
2006/11/19 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python利用拉链法实现字典方法示例
2017/03/25 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
彻底解决Python包下载慢问题
2020/11/15 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
应届医学毕业生求职信分享
2013/12/02 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
高考标语大全
2014/06/05 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
港澳通行证委托书怎么写
2014/08/02 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
财政局个人总结
2015/03/04 职场文书
担保书范文
2019/07/09 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
Nginx实现负载均衡的项目实践
2022/03/18 Servers
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python