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 相关文章推荐
相对路径转化成绝对路径
Apr 10 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
Jan 20 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 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中使用GD库创建圆形饼图的例子
2014/11/19 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
pygame学习笔记(4):声音控制
2015/04/15 Python
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
python3.5的包存放的具体路径
2020/08/16 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
HTML5的新特性(1)
2016/03/03 HTML / CSS
中专毕业生个人职业生涯规划
2014/02/19 职场文书
扬尘污染防治方案
2014/06/15 职场文书
欢迎领导检查标语
2014/06/27 职场文书
学习十八大的心得体会
2014/09/01 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
爱国主义主题班会
2015/08/14 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
500字作文之周记
2019/12/13 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang