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

Encoding 当文件名包含特殊字符时,MAC上没有参数编码,encoding,fine-uploader,Encoding,Fine Uploader,我刚刚发现,在mac上,如果文件名包含特殊字符(如ä/ö/…),URL编码就不起作用 正如您在Chrome请求中看到的,它根本没有编码: Request Payload ------WebKitFormBoundaryUQC7QNkoqSSO2qui Content-Disposition: form-data; name="datacourse" 25672 ------WebKitFormBoundaryUQC7QNkoqSSO2qui Content-Disposi

我刚刚发现,在mac上,如果文件名包含特殊字符(如ä/ö/…),URL编码就不起作用

正如您在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?u?u?u?ßß”

知道这里出了什么问题吗?这是我可以在php脚本中修复的东西。或者这是优秀的上传者必须做的事情

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

谢谢


Daniel

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



您可以在项目的Github repo问题跟踪器中看到有关此问题的更多信息。

您好,但在windows系统上它是编码的。只是在Mac上没有。这里他们说它是编码的:添加metatag不会改变任何事。该博客文章的顶部列出了一个更新,说明从3.3版开始,参数不再是URL编码的y最初是URL编码的,但这不合适。上传者不需要做任何事情来确保这些参数编码正确。如果无法在服务器端解码这些值,并且文档中包含了正确的元标记,则服务器代码有问题。您需要确保服务器端代码正确e总是将参数视为UTF-8编码。在mac上,只要文件名中没有ä,ö,ü,它就可以工作。如果文件名没有ä,ö,ü,它就会中断。如果没有这一点,参数中的这个字符就可以正常工作。感谢您的反馈。正如我之前说过的,我尝试通过执行$_REQUEST[name]=utf8Ădecode($ĂREQUEST[name])来解码php中的每个post参数;你有没有一个例子来说明如何正确地使用它,这样它也可以与mac一起使用?我对PHP不是很了解,但是PHP手册页建议
utf8_decode
可能不适合你的场景。如果字符串已经是UTF-8编码的,并且你的服务器使用UTF-8作为默认编码,为什么你觉得需要对字符串进行解码一串