使用Ajax发布unicode字符

时间:2011-08-21 10:44:58

标签: php ajax unicode upload drag-and-drop

我正在尝试将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项目中找到它。

1 个答案:

答案 0 :(得分:3)

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