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 = "www.jb51.net .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头和去掉方法,希望大家喜欢。

java读取csv文件忽略bom头_PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法...相关推荐

  1. java读取csv文件_使用扫描仪读取Java中的CSV文件

    java读取csv文件 We can use Java Scanner Class to read CSV File in java. 我们可以使用Java扫描程序类在Java中读取CSV文件. 读取 ...

  2. java 读取csv文件乱码_java读取csv文件乱码怎么解决

    csv文件默认编码为ANSI,java读取CSV出现乱码主要是编码不一致问题.(推荐:java视频教程)DataInputStream in = new DataInputStream(new Fil ...

  3. java读取csv文件的两种方式

    java读取csv文件的两种方式 1.CsvReader读取 import com.csvreader.CsvReader; /*** CsvReader 读取* @param filePath* @ ...

  4. Java读取pdf模板,并动态生成pdf文件,如动态生成准考证

    Java读取pdf模板,并动态生成pdf文件,如动态生成准考证 ​ 前几天遇到了一个生成准考证的需求,并提供用户下载,然后百度了一圈还是觉得使用itextpdf这个框架好用点.但是还需要找到一个能创建 ...

  5. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  6. js下载文件 java_[Java教程]使用js实现点击按钮下载文件

    [Java教程]使用js实现点击按钮下载文件 0 2016-11-11 19:02:54 有时候我们在网页上需要增加一个下载按钮,让用户能够点击后下载页面上的资料,那么怎样才能实现功能呢?这里有两种方 ...

  7. java读取csv文件

    2019独角兽企业重金招聘Python工程师标准>>> CSV其实就是COMMA SEPARATED VALUE的缩写. 在开发中用Java操作csv文件有专门的的API叫javac ...

  8. java读取csv文件行数_java读取巨大csv的行数

    我有超过700K行的巨大csv行数.我必须解析那些csv的行和do ops.我想通过使用线程来做到这一点.我第一次尝试做的很简单.每个线程都应该有唯一的csv行.我只有有限的行数只能读到3000.我创 ...

  9. java读取csv文件的行数_JMeter 读取 CSV 文件数据行数

    在用 JMeter 做测试时,经常需要调用外部 CSV 文件的数据到脚本中使用,如果我们想对 CSV 文件中数据的行数进行统计,这个怎么做呢? 针对上面表格的数据,我们一起来学习一下如何统计数据行数吧 ...

  10. java读取csv合适文件_解析-您可以推荐一个Java库来读取(并可能写入)CSV文件吗?...

    Super CSV是读取/解析,验证和映射CSV文件到POJO的绝佳选择! 我们(Super CSV团队)刚刚发布了一个新版本(您可以从SourceForge或Maven下载它). 读取CSV文件 以 ...

最新文章

  1. 建站常用13种PHP开源CMS比较
  2. U811.1接口EAI系列之一--通用把XML传送给EAI处理方法--PowerBuilder语言
  3. 进程间通信-共享内存实例
  4. fatal error C1001的一个解决心得
  5. php mail 在线,在线web e-mail发送
  6. 《Java虚拟机原理图解》1.3、class文件里的訪问标志、类索引、父类索引、接口索引集合...
  7. java给方法参数赋值_java方法参数的赋值问题实例源码介绍
  8. oracle 登录不了的解决
  9. 做游戏开发,选择Unity还是Unreal?
  10. 面试必备:消息队列原理和选型(荣耀典藏版)
  11. 【手把手教程】uniapp + vue 从0搭建仿斗鱼虎牙直播App:腾讯云MLVB移动直播实践连麦PK+带货
  12. px4仿真无法起飞问题(Failsafe enabled: no datalink)
  13. ambiguous column name 错误
  14. 熟悉RT-Thread的软硬件环境【RT-Thread学习笔记 1】
  15. Python爬取豆瓣读书Top250(正则表达式)
  16. Unity3D-设置地形
  17. 82. 采用 OPA5 开发支持页面跳转的 SAP UI5 集成测试用例
  18. 关于工资、社保、公积金、个人所得税等小常识
  19. html 预览 base64 PDF
  20. 霹雳火s毕老师_$_Java笔记(一)

热门文章

  1. 「学术放养」和「认真负责」并不冲突,芝大CS博士谈从导师身上学到的几件事...
  2. Hokuyo‘s first try
  3. html4与html5的区别
  4. Urllib库的基本使用
  5. Orchard详解--第五篇 CacheManager
  6. 映射器配置文件和映射器接口
  7. 利用HttpHandler和Cache统计点击量
  8. MFC对话框打开一幅图片并在picture显示和图片保存
  9. 使用OpenCV获取图像中某一点的像素值和修改某一点的像素值
  10. Python在指定文件夹生成随机文件