【问题标题】:utf-8 filename are ruined when uploading through IIS通过 IIS 上传时,utf-8 文件名被破坏
【发布时间】: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


【解决方案1】:

我认为,问题在于 IIS。 IIS 在将所有请求数据发送到 PHP 进程之前将它们转换为 ascii。由于这种转换,utf-8 编码请求的所有特殊字符都将被销毁。

IIS 支持更改此过程: https://www.iis.net/learn/application-frameworks/install-and-configure-php-on-iis/configuring-the-fastcgi-extension-for-iis-60#utf8servervars

除此之外,PHP 在处理 Windows 上文件名中的 utf-8 时存在问题。此错误已在 PHP 7.1 中修复: https://bugs.php.net/bug.php?id=33350

我解决了更改 IIS 中的设置并升级到 PHP 7.1 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2014-06-30
    • 2013-12-22
    • 2013-06-04
    相关资源
    最近更新 更多