57

我有一个 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=value2Firefox 和 IE7 的形式结束,这意味着我无法正确解析查询字符串。

我也尝试使用也不起作用的 encodeURIComponent 。

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

4

4 回答 4

107

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() 是你真正需要的。

于 2009-02-27T23:14:33.127 回答
2

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

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

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

于 2015-06-08T14:01:15.410 回答
0
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...");
      }
}
于 2018-02-05T06:23:14.467 回答
-3
javascript:alert(escape('?key=value1&key2=value2'));

适合我吗?

于 2009-02-27T23:12:17.500 回答