Как закодировать строку запроса так, чтобы она была значением другой строки запроса в 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
Ответы
Ответ 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'));
Прекрасно работает для меня?