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 相关文章推荐
mysql 中InnoDB和MyISAM的区别分析小结
Apr 15 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP学习之整理字符串
Apr 17 PHP
php中取得文件的后缀名?
Feb 20 PHP
PHP 转义使用详解
Jul 15 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
Jan 22 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
php生成curl命令行的方法
Dec 14 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
PHP多维数组指定多字段排序的示例代码
May 16 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
[46:55]Ti4 冒泡赛第二轮 LGD vs C9
2014/07/14 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python 中的列表解析和生成表达式
2011/03/10 Python
python从入门到精通(DAY 2)
2015/12/20 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
servlet面试题
2012/08/20 面试题
花店创业计划书范文
2014/02/07 职场文书
2014年中秋寄语
2014/08/11 职场文书
企业财务经理岗位职责
2015/04/08 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript