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实现将GB编码转换为UTF8
Nov 25 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
php动态生成JavaScript代码
Mar 09 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
关于php正则匹配汉字的方法介绍
Apr 25 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
php实现学生管理系统
Mar 21 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
Nov 15 PHP
php实现简单加入购物车功能
Mar 07 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 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 adodb介绍
2009/03/19 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
PHP 批量删除 sql语句
2009/06/05 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
2011/07/08 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
angular中的post请求处理示例详解
2020/06/30 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
详解Django通用视图中的函数包装
2015/07/21 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
python生成圆形图片的方法
2020/03/25 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
python制作朋友圈九宫格图片
2019/11/03 Python
Python实现AI换脸功能
2020/04/10 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
财务主管自我鉴定
2014/01/17 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
就职演讲稿范文
2014/05/19 职场文书
社会实践的活动方案
2014/08/22 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL