我刚刚发现,如果文件名中包含特殊字符(如ä/ö/...)那么,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是不是要走的路:(
由于
丹尼尔
答案 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中查看有关此内容的更多信息。