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 相关文章推荐
在PHP3中实现SESSION的功能(三)
Oct 09 PHP
?算你??的 PHP 程式大小
Dec 06 PHP
php include,include_once,require,require_once
Sep 05 PHP
php Smarty初体验二 获取配置信息
Aug 08 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
php的mssql数据库连接类实例
Nov 28 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
php开发微信支付获取用户地址
Oct 04 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
php微信公众号开发之现金红包
Apr 16 PHP
php+js实现裁剪任意形状图片
Oct 31 PHP
PHP实现的敏感词过滤方法示例
Mar 06 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批量删除数据
2007/01/18 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
js查错流程归纳
2012/05/04 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
Angular4 反向代理Details实践
2018/05/30 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Python基础练习之用户登录实现代码分享
2017/11/08 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
浅谈Python3中print函数的换行
2020/08/05 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
成龙洗发水广告词
2014/03/14 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
店铺转让协议书
2014/12/02 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
回复函格式及范文
2015/07/14 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis
tree shaking对打包体积优化及作用
2022/07/07 Java/Android