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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
Apr 02 PHP
php将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
php 深入理解strtotime函数的使用详解
May 23 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
如何使用php输出时间格式
Aug 31 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 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中 $$str 中 "$$" 的详解
2015/07/06 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
2020/08/08 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
Python中的字典遍历备忘
2015/01/17 Python
TensorFlow神经网络优化策略学习
2018/03/09 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
python输出pdf文档的实例
2020/02/13 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
pandas实现导出数据的四种方式
2020/12/13 Python
法国体育用品商店:GO Sport
2019/10/23 全球购物
我的动漫时代的创业计划书范文
2014/01/27 职场文书
手机被没收检讨书
2014/02/22 职场文书
代理协议书
2014/04/22 职场文书
未婚证明书模板
2014/10/08 职场文书
python中 Flask Web 表单的使用方法
2022/05/20 Python