繁体   English   中英

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

[英]UTF-8 BOM added to downloaded file

我在Windows Server 2012上使用PHP和IIS8。我在服务器上创建了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个字符。 我已经检查了服务器上的文件,并将其正确保存在该文件中(未保存BOM表,并且缺少三个字符)。

用于创建和上传文件的PHP脚本具有标头

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

我采取了在文件末尾添加3次“换行”的操作,以获取缺少的三个字符。 我也可以在变量$ fsize中加上+3,但是我做这种作弊并不舒服(它可能会反击)。 我认为应该有一个更优雅的方法。

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

有人可以看到我在想什么吗?

在此先感谢您的帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM