2011-08-21 56 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! –