Размещение символов Юникода с помощью Ajax - PullRequest
1 голос
/ 21 августа 2011

Я пытаюсь интегрировать функцию перетаскивания файлов HTML5 в мой проект KCFinder .Код написан кем-то из форума .Работает нормально.Единственная проблема, если вы пытаетесь загрузить файлы в каталог с именем, содержащим специальные символы Unicode (кириллица и т. Д.).Путь к каталогу, куда должны быть загружены файлы, передается через $ _GET ['dir'].Если я использую кнопку загрузки вместо drag'n'drop, загрузка работает, и я вижу

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

files/ÑеÑÑ

в данных POST (используя Firebug).Реальный путь к каталогу files/тест.Если я перетаскиваю файлы со своего компьютера в один и тот же каталог, у меня появляется ошибка

String contains an invalid character" code: "5
xhr.sendAsBinary(postbody); 

Перетаскивание работает без ошибок, если имя каталога, в которое я пытаюсь загрузить, имеет толькосимволы Юникода.Я пытался закодировать параметр 'dir' с помощью encodeURIComponent (), но в этом случае ошибка исчезла, но ответивший 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 Ответ

3 голосов
/ 21 августа 2011

Строки JavaScript кодируются с помощью UTF-16, как вы можете видеть в строке с кодировкой URL (0xD182 - кодовая единица UTF-16 и т. Д.). Возможно, вам следует закодировать строку как явную строку UTF-8 в вашем запросе AJAX.

...