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 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
默默简单的写了一个模板引擎
Jan 02 PHP
php实现的简单压缩英文字符串的代码
Apr 24 PHP
php面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
php精度计算的问题解析
Jun 21 PHP
PHP7 foreach() 函数修改
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
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
ajax异步刷新实现更新数据库
2012/12/03 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
js中运算符&& 和 || 的使用记录
2014/08/21 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
js中日期的加减法
2015/05/06 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
Python 文件和输入输出小结
2013/10/09 Python
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
pyqt5自定义信号实例解析
2018/01/31 Python
python调试神器PySnooper的使用
2019/07/03 Python
Python中私有属性的定义方式
2020/03/05 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Python接口测试文件上传实例解析
2020/05/22 Python
python eventlet绿化和patch原理
2020/11/21 Python
门卫岗位职责
2013/11/15 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
市级三好生竞选稿
2015/11/21 职场文书
小学毕业教师寄语
2019/06/21 职场文书
无线电知识基础入门篇
2022/02/18 无线电