web-dev-qa-db-fra.com

Comment encoder une chaîne de requête afin qu'elle soit la valeur d'une autre chaîne de requête en javascript?

J'ai une fonction javascript qui transmet comme chaîne de requête une autre chaîne de requête.

En d'autres termes, je veux que la chaîne de requête soit: 

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

Cependant, si je redirige comme ceci:

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

il se termine par http://www.somesite.com?somequery=?key1=value1&key2=value2 dans Firefox et IE7, ce qui signifie que je ne peux pas analyser correctement la chaîne de requête.

J'ai aussi essayé d'utiliser encodeURIComponent qui ne fonctionnait pas non plus.

Existe-t-il une autre fonction ou un hack pour forcer la redirection à garder la valeur somequery échappée?

44
rmw

encodeURIComponent fonctionnera. (Vous pouvez ou non vouloir le caractère principal?, En fonction de ce que le script attend.)

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

M'emmène à:

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

Lorsque vous survolez cette icône, celle-ci peut apparaître une fois décodée dans la barre d'état du navigateur, mais vous vous retrouverez au bon endroit.

escape/unescape () est une mauvaise chose pour le codage des paramètres de requête, il obtient les caractères Unicode et les plus erronés. Il n'y a presque jamais de cas où escape () est ce dont vous avez vraiment besoin.

82
bobince

La méthode native escape fait cela. mais vous pouvez aussi créer un encodeur personnalisé comme:

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

cela remplacera les clés utilisées dans les chaînes de requête. De plus, vous pouvez l’appliquer à n’importe quel autre encodage personnalisé en ajoutant les paires clé-valeur nécessaires.

1
Reyraa
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
BRS13