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

时间:2009-02-27 23:06:59

标签: 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.location = url;

它在firefox和IE7中以http://www.somesite.com?somequery=?key1=value1&key2=value2结尾,这意味着我无法正确解析查询字符串。

我也尝试过使用不能正常工作的encodeURIComponent。

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

4 个答案:

答案 0 :(得分:86)

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()。

答案 1 :(得分:2)

原生escape方法可以做到这一点。你也可以创建一个自定义编码器,如:

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

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

答案 2 :(得分: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...");
      }
}

答案 3 :(得分:-1)

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

适合我吗?