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 相关文章推荐
用libtemplate实现静态网页生成
Oct 09 PHP
如何在PHP中使用Oracle数据库(4)
Oct 09 PHP
php的一个登录的类 [推荐]
Mar 16 PHP
php通用防注入程序 推荐
Feb 26 PHP
用PHP代码给图片加水印
Jul 01 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
PHP Redis扩展无法加载的问题解决方法
Aug 22 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
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
vue代码分割的实现(codesplit)
2018/11/13 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
Flask之flask-session的具体使用
2018/07/26 Python
Django进阶之CSRF的解决
2018/08/01 Python
python中的句柄操作的方法示例
2019/06/20 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
python如何运行js语句
2020/09/09 Python
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
小学英语教学反思案例
2014/02/04 职场文书
小学教师国培感言
2014/02/08 职场文书
排查整治工作方案
2014/06/09 职场文书
护理见习报告范文
2014/11/03 职场文书
介绍信模板
2015/01/31 职场文书
党员承诺书范文2015
2015/04/27 职场文书
怎样写家长意见
2015/06/04 职场文书
python游戏开发Pygame框架
2022/04/22 Python
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python