Подтвердить что ты не робот

Как закодировать строку запроса так, чтобы она была значением другой строки запроса в javascript?

У меня есть функция javascript, которая передает в качестве строки запроса значение другой строки запроса.

Другими словами, я хочу, чтобы строка запроса была:

http://www.somesite.com/?somequery=%3fkey%3dvalue1%2520%26%2520key2%3value3

Однако, если я перенаправляю так:

var url = 'http://www.somesite.com/?somequery=';
url += escape('?key=value1&key2=value2');
window.location = url;

он заканчивается как http://www.somesite.com?somequery=?key1=value1&key2=value2 в firefox и IE7, что означает, что я не могу правильно разобрать строку запроса.

Я также пытался использовать encodeURIComponent, который тоже не работал.

Есть ли другая функция или хак, чтобы заставить перенаправление сохранить значение somequery es

4b9b3361

Ответ 1

encodeURIComponent будет работать. (Вы можете или не хотите, чтобы ведущий '?, В зависимости от ожидаемого script.)

var c= 'd e'
var query= '?a=b&c='+encodeURIComponent(c);
var uri= 'http://www.example.com/script?query='+encodeURIComponent(query);
window.location= uri;

Отвечает мне:

http://www.example.com/script?query=%3Fa%3Db%26c%3Dd%2520e

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

escape/unescape() является неправильной вещью для кодирования параметров запроса, это приводит к неправильным символам Unicode и плюсам. Существует почти никогда не случай, когда escape() - это то, что вам действительно нужно.

Ответ 2

Нативный escape метод делает это. но также вы можете создать собственный кодер, например:

function encodeUriSegment(val) {
  return encodeUriQuery(val, true).
             replace(/%26/gi, '&').
             replace(/%3D/gi, '=').
             replace(/%2B/gi, '+');
}

это заменит клавиши, используемые в строках запроса. еще больше вы можете применить его к любым другим пользовательским кодировкам, добавив необходимые пары ключей-значений.

Ответ 3

javascript:alert(escape('?key=value1&key2=value2'));

Прекрасно работает для меня?