我正在尝试将HTML5拖放文件上传功能集成到我的项目KCFinder中。代码由forum的某人编写。它工作正常。如果您尝试将文件上传到名称中包含特殊unicode字符(cyrillic等...)的目录,则唯一的问题。 目录路径,文件应上传到,通过$ _GET ['dir']传输。 如果我使用上传按钮而不是拖放,则上传工作正常,我看到了
Content-Disposition: form-data; name="dir"
files/ÑеÑÑ
在POST数据中(使用Firebug)。真实的目录路径是files/тест
。
如果我将文件从我的计算机拖放到同一目录,我收到错误
String contains an invalid character" code: "5
xhr.sendAsBinary(postbody);
如果我尝试上传的目录名称只有非unicode字符,则拖放工作没有错误。我试图用encodeURIComponent()编码'dir'参数,但是在这种情况下错误消失了,但是响应的PHP得到它编码(“files /%D1%82%D0%B5%D1%81%D1%82” )
postbody += 'Content-Type: ' + evt.target.thisFileType + '\r\n\r\n' +
evt.target.result + '\r\n--' + boundary +
'\r\nContent-Disposition: form-data; name="dir"\r\n\r\n' +
encodeURIComponent(evt.target.thisTargetDir) + '\r\n--' + boundary + '\r\n--' +
boundary + '--\r\n';
该项目有Git。我无法发布更多超链接。您可以在SourceForge项目中找到它。
答案 0 :(得分:3)
JavaScript字符串使用UTF-16编码,您可以在URL编码的字符串中看到(0xD182是UTF-16代码单元等)。您应该将字符串编码为AJAX请求中的显式UTF-8字符串。