вырезать специальные символы в имени папки при использовании GET - PullRequest
0 голосов
/ 28 ноября 2011

Я давно захожу на stackoverflow.com и всегда находил решение своей проблемы.Но на этот раз все по-другому.Вот почему я публикую свой первый вопрос здесь.

Ситуация выглядит следующим образом: мой веб-сайт предоставляет обозреватель каталогов, который позволяет пользователям загружать весь каталог в виде zip-файла.Проблема в том, что я получаю сообщение об ошибке, когда хочу загрузить dir, содержащий специальные символы в его имени, то есть 'c ++'.Я не хочу заставлять пользователей НЕ называть свои папки этими специальными символами, поэтому мне нужна подсказка об этом.Я заметил, что вся проблема сводится к протоколу GET.Я использую ajax POST, например, чтобы выкатить содержимое каталога, но для создания .zip-файла и его загрузки мне нужно GET:

var dir_clicked = $(e.target).attr('path'); //let's say it equals '/c++'
window.location = 'myDownloadSite.php?directory_path='+dir_clicked;

Я изучил всю дорожку переменной dir_clicked, шаг за шагом, и этоКажется, что переменная в адресе отправляется правильно (я вижу правильный URL в браузере), но введите:

echo $_GET['directory_path']

в myDownloadSite.php печатает

'/c'

вместо

'/c++'

Почему протокол GET сокращает мои плюсы?

Ответы [ 4 ]

0 голосов
/ 28 ноября 2011

Вы можете использовать:

encodeURIComponent() //to get the url then use
decodeURIComponent()  //to decode and access ur filename.

Используйте urlencode() и urldecode() на стороне сервера.

0 голосов
/ 28 ноября 2011

Попробуйте кодировать ваш URI с помощью encodeURI(url) функции JavaScript.

window.location = encodeURI('myDownloadSite.php?directory_path=' + dir_clicked);
0 голосов
/ 28 ноября 2011

Когда информация публикуется, она кодируется специальными символами, звучит так, будто вам просто нужно декодировать их перед использованием информации.

Вы можете использовать функцию php urldecode () для декодирования имен папок перед их использованием ...

$_GET[directory_path]=urldecode($_GET[directory_path]);
0 голосов
/ 28 ноября 2011

Может быть, использовать encodeURIComponent(), а затем удалить все вхождения% xx?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...