UTF-8 BOM已添加到下载的文件中

时间:2013-05-13 14:08:12

标签: php iis utf-8

我在Windows Server 2012上使用PHP和IIS 8.我在服务器上创建了一个UTF-8编码文件,然后使用以下代码将其推送到客户端:

                // Start upload to client
                $fullPath = $full_name;
                $fsize = filesize($fullPath);
                $path_parts = pathinfo($fullPath);
                $ext = strtolower($path_parts["extension"]);
                header("Content-type: application/octet-stream");
                header("Content-Disposition: attachment; filename=\"".$file_name."\"");
                header("Content-length: $fsize");
                header("Cache-control: private");
                readfile($full_name);

当客户端收到文件时,它包含一个起始BOM和(哦),文件末尾缺少3个字符。我已经检查了服务器上的文件并将其保存在那里(没有保存物料清单,并且有三个丢失的字符)。

创建和上传文件的PHP脚本具有标题

header('Content-Type:text/html; charset=UTF-8');

我已经在文件末尾添加了3次“换行”以获取三个丢失的字符。我也可以在变量$ fsize中添加+3,但是我觉得做这种作弊感觉不舒服(它可能会回击)。我认为应该有更优雅的方式。

奇怪的是我在使用IIS 7.5的Win7机器上使用相同的代码,并且没有添加UTF-8 BOM的问题。 PHP目录是Win7机器上目录的副本,包括php.ini文件。

有人可以看到我错过了什么吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您也应该检查脚本文件中的BOM。通常,如果您的IDE使用BOM保存带有BOM的UTF-8文件,则它位于打开的<?php标记之前,因此php将其视为输出。