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 相关文章推荐
用ODBC的分页显示
Oct 09 PHP
php下使用无限生命期Session的方法
Mar 16 PHP
php读取html并截取字符串的简单代码
Nov 30 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
二招解决php乱码问题
Mar 25 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
smarty缓存用法分析
Dec 16 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
使用python解析xml成对应的html示例分享
2014/04/02 Python
python常规方法实现数组的全排列
2015/03/17 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
Python实现按中文排序的方法示例
2018/04/25 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
python判断数字是否是超级素数幂
2018/09/27 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
python能做哪方面的工作
2020/06/15 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
SQL中where和having的区别
2012/06/17 面试题
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
励志演讲稿500字
2014/08/21 职场文书
高中学生自我评价范文
2014/09/23 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
售房协议书范本
2015/08/11 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
在python中读取和写入CSV文件详情
2022/06/28 Python