PHP 使用流方式下载文件与 UTF-8 的 BOM 问题

  最近有位客户反映,上传文档下载后,图片文件无法浏览,而 Word 文档则出现乱码,但 RAR 文件则正常。原来一切都正常,只是最近几天才出现这个问题。客户的环境是 Windows 2003 + Apache + PHP + MySql。

  起初以为是缓冲的问题,于是把缓冲关了,但问题依旧,又挨个试 ob_flush()、flush()、ob_end_flush()、ob_clean()、ob_end_clean(),仍然无济于事。怀疑客户开了 GZIP 压缩,从而可能造成影响,但客户说没开。没法子,只好上传一个十多个字节的 txt 文件,然后下载下来,在二进制编辑器中查看,发现在文件开始处会插入编码 EF BB BF,很熟悉的字眼,google 后才想起 PHP 在 UTF-8 下有一个很古老的问题——BOM。但是我是用 Eclipse 写程序的,按理说应该不存在这个问题。

  让客户把他们那边的下载页面源码传给我后,查看二进制代码,却没有看到有 EF BB BF 的字样,郁闷!又好一通查找 google,却没有找到流下载文件时有类似问题的。按理说,就我这点微末水平,不至于会遇到独一份的问题啊。无奈之下,再查看源码,突然注意到一句 require_once('config.php'),于是恍然大悟,问客户是否改过 config.php 中的配置,客户说改过,问用什么改的,说记事本,至此真相大白——Windows 的记事本会自动在 UTF-8 编码的文件中加入 EF BB BF。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值