File upload 通过IIS上载时,utf-8文件名被破坏

File upload 通过IIS上载时,utf-8文件名被破坏,file-upload,utf-8,character-encoding,iis-7.5,windows-server-2008,File Upload,Utf 8,Character Encoding,Iis 7.5,Windows Server 2008,当我通过IIS上传UFT-8文件名的文件时,我的Windows服务器文件名被破坏了。(它们被更改为ASCII编码,因此无法访问)。我想知道是否有解决这个问题的办法。我还应该提到,我的Windows服务器在UTF-8文件名方面没有任何问题,我可以通过RDP或FTP创建它们。此问题仅在通过IIS上载时发生 配置: 操作系统:Windows Server 2008 SP1 Web服务器:IIS 7.5 通过fastcgi执行的PHP脚本上传 我认为,问题在于IIS。IIS在将所有请求数据发送到PHP进

当我通过IIS上传UFT-8文件名的文件时,我的Windows服务器文件名被破坏了。(它们被更改为ASCII编码,因此无法访问)。我想知道是否有解决这个问题的办法。我还应该提到,我的Windows服务器在UTF-8文件名方面没有任何问题,我可以通过RDP或FTP创建它们。此问题仅在通过IIS上载时发生

配置:
操作系统:Windows Server 2008 SP1
Web服务器:IIS 7.5
通过fastcgi执行的PHP脚本上传


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

IIS支持更改此过程:

此外,PHP在windows上处理文件名中的utf-8时也存在问题。PHP 7.1已修复此错误:


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

Windows文件系统不支持UTF-8文件名。FTP协议支持UTF-8,但FTP服务器必须将这些文件名转换为Ansi或UTF-16,然后才能将它们传递给文件系统API。web服务器必须做同样的事情,因此它必须知道文件名是UTF-8编码的。很可能,您的web客户端在上载时没有告诉IIS文件名是UTF-8。如果PHP脚本负责处理文件名,那么问题可能就在那里。我不知道Windows上的PHP是否支持Unicode文件名,大多数从UNIX移植到Windows的应用程序都不支持Unicode文件名。问题似乎根源于PHP。PHP脚本无法创建具有utf-8文件名的文件。现在,我正在使用一种解决方法,从文件名中消除非ASCII字符,并且在某种程度上是成功的。