Ответ 1
Вы должны кодировать специальные символы в URL-адресах. См.: http://www.w3schools.com/tags/ref_urlencode.asp
Следующий URL-адрес работает нормально:
Однако, если я хочу поместить некоторые специальные символы в `param like?,/, \, то URL-адрес будет выглядеть следующим образом:
или
http://localhost/mysite/mypage?param=http://www.mysite.com/page2?a=\& b =...
который не будет работать. Как решить эту проблему?
Вы должны кодировать специальные символы в URL-адресах. См.: http://www.w3schools.com/tags/ref_urlencode.asp
Вам нужно закодировать параметры запроса, прежде чем объединять их для формирования URL-адреса. Здесь нужна функция encodeURIComponent. Например,
URL, который вам нужно создать, это:
http://localhost/mysite/mypage?param=a=?&b=/
Теперь, если предположить? и/приходит как переменные, вам нужно закодировать их, прежде чем вводить URL-адрес. Поэтому давайте создадим ваш url, используя эту функцию (я ожидаю два параметра запроса):
var q1 = "a=?"; //came from some input or something
var q2 = "/"; //came from somewhere else
var faultyUrl = "http://localhost/mysite/mypage?param="+ q1 +"&b=" + q2;
// "http://localhost/mysite/mypage?param=a=?&b=/"
var properUrl = "http://localhost/mysite/mypage?param="+ encodeURIComponent(q1) +"&b=" + encodeURIComponent(q2);
//"http://localhost/mysite/mypage?param=a%3D%3F&b=%2F"
Эта функция находится в базовом JS и поддерживается во всех браузерах.
В JavaScript вы можете использовать функцию encodeURI().
ASP имеет функцию Server.URLEncode().
HttpServerUtility.UrlEncode в .NET
Простой способ передать значение QueryString со специальным символом с помощью javascript:
var newURL=encodeURIComponent(uri);
window.location="/abc/abc?q="+newURL;
Вам нужно использовать специальные символы кодировки, см. эту страницу для справки.
Если вы используете PHP, есть функция для этого, называемая urlencode().
Вам нужно подставить символы объектами URL. Некоторая информация здесь.