当文件名包含特殊字符时,MAC上没有参数编码

时间:2013-10-08 16:37:58

标签: encoding fine-uploader

我刚刚发现,如果文件名中包含特殊字符(如ä/ö/...)那么,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上,requets看起来像这样:

 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是不是要走的路:(

由于

丹尼尔

1 个答案:

答案 0 :(得分:1)

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

<meta charset="utf-8">

您可以在项目的Github回购问题跟踪器中的a similar case a Fine Uploader user opened up中查看有关此内容的更多信息。