PHP 下载文件时自动添加bom头的方法实例

2014-11-16  来源:本站原创  分类:php技巧  人气:0 

这篇文章主要介绍了PHP 下载文件时自动添加bom头的方法实例,有需要的朋友可以参考一下

首先弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。
不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB BF 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见)。这像是一个约定俗成的东西,当系统看到这玩意的时候,就会觉得你这个文件是UTF-8编码的。

如果你的接口是UTF-8的,你需要强制下载一个文件,比如csv.excel在默认情况(中文背景)下,认为csv是GB编码的,所以如果米有bom头,那你给用户呈现的文件,可能就是乱码了。

怎么加bom头呢?
在输出文件之前加上bom头就可以了:

                // 文件名
  $filename = "www.jb51.net.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;
相关文章
  • PHP 下载文件时自动添加bom头的方法实例 2014-11-16

    这篇文章主要介绍了PHP 下载文件时自动添加bom头的方法实例,有需要的朋友可以参考一下 首先弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark). 不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB BF 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见).这像是一个约定俗成的东西,当系统看到这玩意的时候,

  • asp.net 下载文件时根据MIME类型自动判断保存文件的扩展名 2015-01-28

    如果我们没法正确判断下载源的文件类型的话,就无法保存为正确的文件格式,会给后续操作及人工阅览造成困扰. 所幸的是,WebRequest可以给出下载源的MIME信息,这让我们可以确定文件的真实格式,并以此来决定最终的存储扩展名.( 引言 用WebClient下载远程资源时,经常会遇到类似这样的网址: http://www.uushare.com/filedownload?user=icesee&id=2205188 http://www.guaishow.com/u/luanfujie/g9675

  • PHP批量删除.清除UTF-8文件BOM头的代码实例 2013-12-17

    这篇文章主要介绍了PHP批量删除.清除UTF-8文件BOM头的代码实例,需要的朋友可以参考下 记得运行代码前先把文件备份一下哦,避免出现失败问题. 代码一: function checkBOM ($filename) { global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $char

  • ASP.NET 在下载文件时对其重命名的思路及实现方法 2015-02-11

    ASP.NET 在下载文件时对其重命名的思路及实现方法,需要的朋友可以参考一下 有些时候为了保证文件再上传时不会覆盖掉之前上传的文件,同时由于上传的目标目录里的文件可能很多,这个时候一个一个查是不太好的事情,所以这里可以自动生成GUID使文件名重命名成GUID_原来的名称.扩展名.但是在下载的时候最好可能保证恢复到原来的名称.这个时候听伤神的.搜了一下相关资料后得知可使用response来解决.具体代码如下. [csharp] <pre name="code" class=&qu

  • python下载文件时显示下载进度的方法 2013-11-06

    这篇文章主要介绍了python下载文件时显示下载进度的方法,涉及Python文件操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python下载文件时显示下载进度的方法.分享给大家供大家参考.具体分析如下: 将这段代码放入你的脚本中,类似:urllib.urlretrieve(getFile, saveFile, reporthook=report) 第三个参数如下面的函数定义report,urlretrieve下载文件时会实时回调report函数,显示下载进度 def r

  • PHP上传文件时自动分配路径的方法 2014-07-17

    这篇文章主要介绍了PHP上传文件时自动分配路径的方法,可实现对上传文件的分类存放功能,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的文件多了,我们就不能放在同一个目录了,这里我们就来讲讲用PHP自动给上传的文件分配路径的方法. PHP分配上传文件的路径实例 主要程序片段如下: <?php /*数字方式分配路径*/ function all

  • 如何取消下载文件时默认启动迅雷? 2015-03-26

    很多朋友在下载文件时遇到这样的情况:比如,从邮箱里下载文件时,莫名其妙的迅雷启动了,本来可以用IE自带的下载功能直接保存或者,迅雷启动以后,搞得电脑很慢,而且有时候用迅雷从邮箱里下载的文件打不开,没法用. 这是什么原因呢?为什么下载文件时会默认启动迅雷呢?有没有办法取消迅雷启动? 这个问题很容易解决,只要取消迅雷与浏览器的关联即可.这里以最新版的迅雷为案例讲解一下,如何取消迅雷与浏览器关联.看操作: 首先,启动迅雷,点击菜单栏上的"配置"按钮,进入迅雷配置页面: 然后,从左侧的功能栏里

  • asp.net 下载文件时输出文件内容 2015-04-13

    asp.net下当下载文件时,读取路径,输出数据. <script language="C#" runat="server"> protected void Page_Load(object sender, System.EventArgs e) { Response.ContentType = "application/x-shockwave-flash"; string fileFlash = Server.MapPath(&qu

  • TextBox获取输入焦点时自动全选的实现方法 2014-11-09

    TextBox获取输入焦点时自动全选的实现方法,需要的朋友可以参考一下 C#开发WinForm,如何实现TextBox获取输入焦点时自动全选? 肯定不少朋友一看就会觉得再容易不过了:给TextBox添加GotFocus事件,然后在事件中调用TextBox.SelectAll()不就完事了吗?巢皮一开始也理所当然得这么认为,但要是你试试这么做,你会发现的当你用点击鼠标左键让TextBox.获得输入焦点时,里面的文本根本不会全选. 这是why咧?原因是通过鼠标让TextBox获得输入焦点时,Text

  • js固定DIV高度,超出部分自动添加滚动条的简单方法 2014-05-08

    这篇文章介绍了js固定DIV高度,超出部分自动添加滚动条的简单方法,有需要的朋友可以参考一下 function setheight() { var div=document.getElementById("event_basicInfo"); //div.style.width="40%"; div.style.height=400; div.style.overflow="auto"; } window.onload=setheight;

  • jspSmartUpload组件上传下载文件时中文乱码问题(未测试) 2014-06-26

    这次用jspSmartUpload做文件上传下载,该组件默认是GBK编码,当上传的文件名为中文时,我将文件名getBytes()下,将GBK改成UTF-8.测试了下,貌似没问题,突然有一次上传一文件时,发现最后几个字乱码,一直是??.在拿些文件测试,后来知道了是当文件名为中文奇数时,会乱码,而且还上传不了.再做测试,找原因,查看字符的长度,转成16进制看结果.觉得是jspSmartUpload组件对中文支持不足的问题. 在网上找解决方法.下了几个jar,都说解决中文乱码,彻底解决中文乱码!!!用

  • 浏览器下载文件时一共发送2次请求,如何把"下载次数"只记录为1次? 2015-04-13

    最近,个人官网实现了PDF下载功能,出于统计的考虑,增加了"下载次数"download_count这个字段. 但是,我今天突然发现,每次下载download_count都直接+2了.如果服务器发生这种事,还有一定的可能,本地就我一个人下载,怎么可能下载2次.于是,打开了log4j的debug模式,果然执行了2次更新请求. @RequestMapping(value = "/download/pdf") public void downloadPdf(@Request

  • ubuntu取消pppoe启动时自动拔号的设置方法 2014-04-25

    昨晚用pppoe拨号,今早回公司发现原先的dhcp设置不生效了,所以取消pppoe启动时自动拔号 解决方案: sudo gedit /etc/network/interfaces auto dsl-provider 改成 #auto dsl-provider 此外还将所有跟dsl相关的语句注释,重启,ok. 设置静态ip的方法: Ubuntu的网络参数保存在文件 /etc/network/interfaces中,默认设置使用dhcp,内容如下: # The primary network int

  • Java下载文件时文件名乱码问题解决办法 2013-10-13

    我最近在开发时遇到了文件另存为时文件名出现乱码,在火狐上正常的文件名,在IE中又出现乱码问题,然后好不容易在IE下调试好了文件名乱码问题,在火狐下又出现乱码,最后终于感觉这样是能解决了.具体如下: public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c

  • chrome 自动添加 https 头自己保存以后使用. 2011-10-20

    下面是步骤: 地址栏输入chrome://net-internals/ 在HSTS的标签栏里Domain里填上需要访问的domain,比如g.com 然后选中Include subdomains点击Add按钮即可,可以加多个域 这样所有访问这个域名(包括子域名)都自动转到https了

  • eclipse 新建 java 文件时自动生成注释 2012-03-09

    Windows->Preference->Java->Code Style->Code Templates->Code->New Java file->Edit 原来的模板: ${filecomment} ${package_declaration} ${typecomment} ${type_declaration} 修改后: ${filecomment} ${package_declaration} /** * @author Xing,Ming * @ver

  • 网站下载文件时 地址加jdfwkey=的说明 2014-05-23

    因WEB服务器前置硬防,地址加?jdfwkey=影响收录的解决办法 很多空间商为了防止攻击,打开了硬防火墙,虽然临时解决了攻击问题,但是大大影响了百度和GOOGLE收录, 本人的一个小空间就因为地址被加上了?jdfwkey=jkd3k这样的后缀被大片大片的砍掉收录,最后,连搜索都没有登记了. 非常之郁闷啊. 有什么办法解决吗?有,一是换空间,二是让空间商关闭硬防.非常之麻烦 头痛许久,一朋友告知,其实很简单,两三下就解决掉问题. 不敢独享,放出来给大家. 首先,在空间里新建index.php,如

  • Linux 用cp和rsync同步文件时跳过指定目录的方法 2013-12-10

    某测试站点,在某个节点的时候需要同步到正式站点去,但是里面的config目录不能覆盖 需求是:某测试站点,在某个节点的时候需要同步到正式站点去,但是里面的config目录不能覆盖, 方法一:终端命令行下执行以下命令 cp -R `find /projectA -type d -path /projectA/common/config -prune -o -print | sed 1d ` /projectB/ 方法二: localhost # find projectB/ommon/config

  • 解释BOM头及去掉BOM头方法 2012-09-21

    什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了.其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行. 类似WINDO

  • C#中使用HttpDownLoadHelper下载文件实例 2014-01-25

    这篇文章主要介绍了C#中使用HttpDownLoadHelper下载文件的方法,并实例讲述了在webfrom中与在mvc中的实现方法,需要的朋友可以参考下 本文实例讲述了C#使用HttpDownLoadHelper下载文件的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System