0

我刚刚发现,如果文件名包含特殊字符(如 ä / ö /...),则在 Mac 上 URLEncoding 不起作用

正如您在 Chrome 请求中看到的那样,它根本没有编码:

 Request Payload

 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="datacourse" 
 25672 

 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="datafilename" 

 äääöööüüüßßßß 2.png 
 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="datacontent" 

 10 
 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="datasemester" 

 28 
 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="dataprofessor" 

 äääöööüüüßßßß 2.png 
 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="datadescription" 

 Descriptionäääöööüüüßßßß 2.png 
 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="qquuid" 

 d0b29dd3-9b9a-4583-8d5e-9f692f73917d 
 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="qqtotalfilesize" 

 34403 
 ------WebKitFormBoundaryUQC7QNkoqSSO2qui 
 Content-Disposition: form-data; name="qqfile"; filename="äääöööüüüßßßß 2.png" 
 Content-Type: image/png 


 ------WebKitFormBoundaryUQC7QNkoqSSO2qui--

在 Windows PC 上,请求看起来像这样:

 Request Payload
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="datacourse"

 393
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="datafilename"

 äüüääüßß.jpeg
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="datacontent"

 10
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="datasemester"

 28
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="dataprofessor"


 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="datadescription"

 Description
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="qquuid"

 5befc15f-f98c-4f65-b7c6-b07061dd45fa
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="qqtotalfilesize"

 261618
 ------WebKitFormBoundaryaehKL8ARADkQle4D
 Content-Disposition: form-data; name="qqfile"; filename="äüüääüßß.jpeg"
 Content-Type: image/jpeg


 ------WebKitFormBoundaryaehKL8ARADkQle4D--

在我使用的 PHP 端点中

 $_REQUEST["datafilename"] = utf8_decode("datafilename"]); 

解码formdate。使用 WINDOWS 一切正常。即使在 Mac 上也可以,只要文件名不包含特殊字符(如 ä / ö /...)。

如果有输出就像“a?a?a?o?o?o?u?u?u?ßß”

知道这里出了什么问题吗?那是我可以在我的 php 脚本中解决的问题吗?还是上传者必须做的事情?

只要 Mac 上的文件名是干净的,我就没有这个问题。因此,如果 OS = MAC 不可行,请查找 :(

谢谢

丹尼尔

4

1 回答 1

1

参数不是 URL 编码的。它们已经被多部分编码。OS X 中的 Chrome 开发工具很可能使用 Mac OS Roman 的 OS X 中的默认编码来在您的开发工具控制台中显示字符。如果您无法在服务器端正确解码字符,则可能是您的文档中没有包含正确的字符集元标记。例如,您的文档应包含以下标签:

<meta charset="utf-8">

您可以在一个 Fine Uploader 用户在项目的 Github 存储库问题跟踪器中打开的类似案例中看到有关此的更多信息。

于 2013-10-08T16:51:31.330 回答