Как включить специальные символы в строки запроса

Следующий URL-адрес работает нормально:

http://localhost/mysite/mypage?param=123

Однако, если я хочу поместить некоторые специальные символы в `param like?,/, \, то URL-адрес будет выглядеть следующим образом:

http://localhost/mysite/mypage?param=a=?&b=/

или

http://localhost/mysite/mypage?param=http://www.mysite.com/page2?a=\& b =...

который не будет работать. Как решить эту проблему?

Ответ 2

Вам нужно закодировать параметры запроса, прежде чем объединять их для формирования 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 и поддерживается во всех браузерах.

Ответ 3

В JavaScript вы можете использовать функцию encodeURI().

ASP имеет функцию Server.URLEncode().

HttpServerUtility.UrlEncode в .NET

Ответ 4

Простой способ передать значение QueryString со специальным символом с помощью javascript:

var newURL=encodeURIComponent(uri);
window.location="/abc/abc?q="+newURL;

Ответ 5

Вам нужно использовать специальные символы кодировки, см. эту страницу для справки.

Если вы используете PHP, есть функция для этого, называемая urlencode().