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同时支持GIF、png、JPEG
Oct 09 PHP
DISCUZ 分页代码
Jan 02 PHP
用PHP实现图象锐化代码
Jun 14 PHP
防止MySQL注入或HTML表单滥用的PHP程序
Jan 21 PHP
php array的学习笔记
May 16 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
PHP5常用函数列表(分享)
Jun 07 PHP
PHP页面中文乱码分析
Oct 29 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 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 URL跳转代码 减少外链
2011/06/25 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
Angular使用动态加载组件方法实现Dialog的示例
2018/05/11 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Python易忽视知识点小结
2015/05/25 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
web页面录屏实现
2019/02/12 HTML / CSS
实习生个人找工作的自我评价
2013/10/30 职场文书
先进事迹报告会感言
2014/01/24 职场文书
执行总经理岗位职责
2014/02/03 职场文书
银行类自荐信
2014/02/04 职场文书
要账委托书范本
2014/09/15 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
旷工辞退通知书
2015/04/17 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技