PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法


Posted in PHP onJanuary 04, 2016

PHP 下载文件时自动添加bom头,首先需要大家弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。

在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了。

不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB BF 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见)。这像是一个约定俗成的东西,当系统看到这玩意的时候,就会觉得你这个文件是UTF-8编码的。

如果你的接口是UTF-8的,你需要强制下载一个文件,比如csv.excel在默认情况(中文背景)下,认为csv是GB编码的,所以如果米有bom头,那你给用户呈现的文件,可能就是乱码了。

怎么加bom头呢?

在输出文件之前加上bom头就可以了:

代码如下:

// 文件名
 $filename = "3water.com .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;

以下内容给大家介绍解释BOM头和去掉方法

去掉bom头的办法,简单的是下面两种:

1、editplus去BOM头的方法

编辑器调整为UTF8编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),用于编辑器识别这个文件是否是以UTF8编码。

运行Editplus,点击工具,选择首选项,选中文件,UTF-8标识选择 总是删除签名,然后对PHP文件编辑和保存后的PHP文件就是不带BOM的了。

2、ultraedit去除bom头办法

打开文件后,另存为选项的编码格式里选择(utf-8 无bom头),确定就ok了

怎么样,去掉bom头很简单吧

再来一段议论utf8的BOM信息的

BOM是指php文件本身的存储方式为带BOM的UTF-8,普通页面的中文乱码方式一般不是由这个原因导致的。

header("Content-type: text/html; charset=utf-8");

这句话控制html输出页面的编码方式,BOM只有在WINDOWS下采用“记事本”存储为UTF-8时才会有,这个可以用WINHEX把开始的2个字节删掉。

在dreamweaver里面编码设置里面可以设置是否带BOM,一般只要php输出的不是图片(GDI Stream),BOM都不会导致问题。

GDI Stream如果开头有了额外的 字符就会显示为 红叉。

以上内容给大家介绍了PHP 下载文件时自动添加bom头及解释BOM头和去掉方法,希望大家喜欢。

PHP 相关文章推荐
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
php实现的在线人员函数库
Apr 09 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
基于PHP CURL用法的深入分析
Jun 09 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
php实现根据词频生成tag云的方法
Apr 17 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 #PHP
PHP 读取文本文件内容并分页显示
Jan 02 #PHP
php实现概率性随机抽奖代码
Jan 02 #PHP
php实现给一张图片加上水印效果
Jan 02 #PHP
前端必学之PHP语法基础
Jan 01 #PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 #PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 #PHP
You might like
一周学会PHP(视频)Http下载
2006/12/12 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
用python代码做configure文件
2014/07/20 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
Python3 使用pillow库生成随机验证码
2019/08/26 Python
李宁官方网店:中国运动品牌
2017/11/02 全球购物
购买一个高级域名:BuyDomains
2018/03/11 全球购物
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
文秘个人求职信范文
2014/04/22 职场文书
高中学校对照检查材料
2014/08/31 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
销售业务员岗位职责
2015/02/13 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
教学反思怎么写
2016/02/24 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技
python中urllib包的网络请求教程
2022/04/19 Python