如何对查询字符串进行编码,使其成为javascript中另一个查询字符串的值?

如何对查询字符串进行编码,使其成为javascript中另一个查询字符串的值?,javascript,encoding,query-string,Javascript,Encoding,Query String,我有一个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.lo

我有一个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中,这意味着我无法正确解析查询字符串

我还尝试使用编码器组件,但也不起作用

是否有其他函数或黑客强制重定向以保持
somequery
值转义

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

对我来说可以吗?

编码器组件可以工作。(您可能需要也可能不需要前导“?”,这取决于脚本所期望的内容。)

带我去:

当您将鼠标悬停在上面时,它可能会在浏览器的状态栏中显示一次解码,但最终会出现在正确的位置


escape/unescape()对查询参数进行编码是错误的,它获取的是Unicode字符,加的是错误的。几乎没有一种情况下escape()是您真正需要的。

Native
escape
方法可以做到这一点。但您也可以创建自定义编码器,如:

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

这将替换查询字符串中使用的键。此外,您还可以通过添加所需的键值对,将其应用于任何其他自定义编码。

是的,我敢肯定escape已被弃用。很好的调用。这很有效-尽管在解析查询字符串时,我现在必须对其解码两次。似乎当它被编码一次时,它将被浏览器解码,但当它被编码两次时,它将根本不会被解码。奇怪。从1.5开始就不推荐了
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...");
      }
}
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...");
      }
}