【发布时间】:2014-10-25 08:49:08
【问题描述】:
当我在 Windows Server 上通过 IIS 上传具有 UFT-8 文件名的文件时,文件名被破坏。 (它们被更改,就好像它们以 ASCII 编码一样,因此它们不再可访问)。我想知道这个问题是否有任何解决方法。我还应该提到,我的 Windows Server 对 UTF-8 文件名没有任何问题,我可以通过 RDP 或 FTP 创建它们。该问题仅在通过 IIS 上传时出现。
配置:
操作系统:Windows Server 2008 SP1
网络服务器:IIS 7.5
通过fastcgi执行的PHP脚本上传
【问题讨论】:
-
Windows 文件系统不支持 UTF-8 文件名。 FTP 协议支持 UTF-8,但 FTP 服务器必须将这些文件名转换为 Ansi 或 UTF-16,然后才能将它们传递给文件系统 API。 Web 服务器必须做同样的事情,因此它必须知道文件名是 UTF-8 编码的。很可能,您的 Web 客户端在上传时没有告诉 IIS 文件名是 UTF-8。这将解决您的转换问题。
-
如果 PHP 脚本负责处理文件名,那么问题可能就在那里。我不知道 Windows 上的 PHP 是否支持 Unicode 文件名,大多数从 UNIX 移植到 Windows 的应用程序都不支持。
-
问题似乎出在 PHP 上。 PHP 脚本无法创建具有 utf-8 文件名的文件。现在我正在使用一种解决方法,从文件名中消除非 ASCII 字符,并且在某种程度上它是成功的。
标签: file-upload utf-8 character-encoding iis-7.5 windows-server-2008