2009-02-27 28 views
34

我有一個javascript函數作爲查詢字符串值傳遞另一個查詢字符串。如何編碼查詢字符串,以便它是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和IE7,這意味着我無法正確解析查詢字符串。

我也嘗試使用encodeURIComponent哪些也沒有工作。

是否有另一個功能或黑客強制重定向,以保持somequery價值逃脫?

回答

65

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

+0

是的,我非常確定轉義已被棄用。好決定。 – 2009-02-27 23:32:07

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

適合我嗎?

2

原生escape方法做到這一點。還可以創建自定義編碼器,如:

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

這將替換查詢字符串中使用的鍵。更進一步,您可以通過添加所需的鍵值對將其應用於任何其他自定義編碼。

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..."); 
     } 
}