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下的权限算法的实现
Apr 28 PHP
PHP防注入安全代码
Apr 09 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
php读取csc文件并输出
May 21 PHP
PHP模板解析类实例
Jul 09 PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
Jan 21 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php常用文件操作函数汇总
2014/11/22 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
2017/05/26 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
用javascript为页面添加天气显示实现思路及代码
2013/12/02 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
flask框架视图函数用法示例
2018/07/19 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
伦敦一卡通:The London Pass
2018/11/30 全球购物
策划助理岗位职责
2013/11/18 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
推广普通话标语
2014/06/27 职场文书
奖金申请报告模板
2015/05/15 职场文书
党支部半年考察意见
2015/06/01 职场文书
信仰观后感
2015/06/03 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
python中pymysql包操作数据库方法
2022/04/19 Python
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android