我有一个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
值转义?
答案 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;
带我去:
当您将鼠标悬停在该位置时,它可能会在浏览器的状态栏中显示一次解码,但您最终会出现在正确的位置。
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'));
适合我吗?