60 Stimmen

Wie eine Abfragezeichenfolge zu kodieren, so dass es der Wert einer anderen Abfragezeichenfolge in Javascript ist?

Ich habe eine Javascript-Funktion, die als Abfragezeichenfolge Wert eine andere Abfragezeichenfolge übergibt.

Mit anderen Worten, ich möchte, dass die Abfragezeichenfolge lautet:

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

Wenn ich aber so umlenke:

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

endet es als http://www.somesite.com?somequery=?key1=value1&key2=value2 in Firefox und IE7, was bedeutet, dass ich die Abfragezeichenfolge nicht richtig analysieren kann.

Ich habe auch versucht, encodeURIComponent zu verwenden, was auch nicht funktioniert hat.

Gibt es eine andere Funktion oder einen Hack, um die Umleitung zu zwingen, die somequery Wert entkommen?

111voto

bobince Punkte 512550

EncodeURIComponent wird funktionieren. (Je nachdem, was das Skript erwartet, können Sie das führende '?' auch weglassen).

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

Bringt mich zu:

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

Wenn Sie mit dem Mauszeiger darüber fahren, erscheint es in der Statusleiste des Browsers vielleicht einmal dekodiert, aber Sie werden an der richtigen Stelle landen.

escape/unescape() ist die falsche Methode zur Kodierung von Abfrageparametern, da sie Unicode-Zeichen und Pluszeichen falsch interpretiert. Es gibt fast nie einen Fall, in dem escape() das ist, was Sie wirklich brauchen.

2voto

Reyraa Punkte 4112

Einheimische escape Methode macht das. aber Sie können auch einen benutzerdefinierten Kodierer erstellen wie:

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

Dies ersetzt die in den Abfragezeichenfolgen verwendeten Schlüssel. Darüber hinaus können Sie es auf jede andere benutzerdefinierte Kodierung anwenden, indem Sie die benötigten Schlüssel-Werte-Paare hinzufügen.

0voto

BRS13 Punkte 1
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...");
      }
}

-3voto

Gary Green Punkte 21407
javascript:alert(escape('?key=value1&key2=value2'));

Funktioniert das bei mir gut?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X