2011-08-21 52 views
1

我在尝试将HTML5拖放文件上传功能集成到我的项目KCFinder中。该代码由forum中的某个人编写。它工作正常。唯一的问题,如果你试图上传文件到名称目录包含特殊的Unicode字符(西里尔等...)。 目录路径,文件应该上传到,通过$ _GET ['dir']传输。 如果我使用的上传按钮,而不是拖放上传的作品和我(使用Firebug)看到使用Ajax发布unicode字符

Content-Disposition: form-data; name="dir" 

files/ÑеÑÑ 

在POST数据。真实的目录路径是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项目中找到它。

回答

3

JavaScript字符串使用UTF-16编码,正如您在URL编码字符串中所看到的(0xD182是UTF-16代码单元等)。您应该在您的AJAX请求中将字符串编码为明确的UTF-8字符串。

+0

如果你需要一个Javascript UTF-8编码例程,你可以找到一个作为MD5哈希算法的JS实现的一部分[在webtoolkit.info上](http://www.webtoolkit.info/javascript-md5的.html)。 – DaveRandom

+0

@DaveRandom:谢谢!我快速浏览了如何创建UTF8,但我看不到内置的解决方案。好东西。 –

+0

@DaveRandom:是的!这解决了我的问题! 10Q! –