Как закодировать строку запроса, чтобы это значение другой строки запроса в JavaScript? - PullRequest
46 голосов
/ 28 февраля 2009

У меня есть функция 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, чтобы избежать экранирования ??

Ответы [ 4 ]

86 голосов
/ 28 февраля 2009

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

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 голосов
/ 08 июня 2015

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

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

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

0 голосов
/ 05 февраля 2018
function downloadFile(){
      var filePath = "C:/Users/HP/Desktop/Project Folder/DemoProject/";

      var fileInfo = "Error_Issue Minor Cosmetic & Major Fatal Issues (Demo_Project) (2017)_GeneratedOn_12_21_2017 21924 AM.xlsx";
      if((filePath != undefined && filePath.length > 0) && (fileName != undefined && fileName.length > 0)){
        var downloadUrl = "../download?fileName="+encodeURIComponent(fileName)+"&filePath="+encodeURIComponent(filePath);
        $window.location = downloadUrl;
      }else{
        alert("Please define a fileName for downloading...");
      }
}
0 голосов
/ 28 февраля 2009
javascript:alert(escape('?key=value1&key2=value2'));

У меня нормально работает?

...