2009-02-27 24 views
34

Tôi có một hàm javascript chuyển thành chuỗi giá trị truy vấn một chuỗi truy vấn khác.Làm thế nào để mã hóa một chuỗi truy vấn để nó là giá trị của một chuỗi truy vấn khác trong javascript?

Nói cách khác, tôi muốn chuỗi truy vấn là:

http://www.somesite.com/?somequery=%3fkey%3dvalue1%2520%26%2520key2%3value3 

Tuy nhiên, nếu tôi chuyển hướng như thế này:

var url = 'http://www.somesite.com/?somequery='; 
url += escape('?key=value1&key2=value2'); 
window.location = url; 

nó kết thúc như http://www.somesite.com?somequery=?key1=value1&key2=value2 trong firefox và IE7 có nghĩa là Tôi không thể phân tích cú pháp chuỗi truy vấn một cách chính xác.

Tôi cũng đã thử sử dụng encodeURIComponent không hoạt động.

Có chức năng hoặc hack khác để buộc chuyển hướng giữ giá trị somequery được thoát không ??

Trả lời

65

encodeURIComponent sẽ hoạt động. (Bạn có thể hoặc có thể không muốn hàng đầu, tùy thuộc vào những gì kịch bản dự kiến ​​'?'.)

var c= 'd e' 
var query= '?a=b&c='+encodeURIComponent(c); 
var uri= 'http://www.example.com/script?query='+encodeURIComponent(query); 
window.location= uri; 

Đưa tôi đến:

http://www.example.com/script?query=%3Fa%3Db%26c%3Dd%2520e

Khi bạn di chuột qua rằng nó có thể xuất hiện một lần được giải mã trong thanh trạng thái của trình duyệt, nhưng bạn sẽ kết thúc ở đúng nơi.

escape/unescape() là điều sai để mã hóa tham số truy vấn, nó nhận các ký tự Unicode và dấu cộng sai. Có hầu như không bao giờ là một trường hợp thoát() là những gì bạn thực sự cần.

+0

Có, tôi chắc chắn thoát không được dùng nữa. Cuộc gọi tốt. –

+0

Bạn có thể phải giải quyết việc '%' trong [truy vấn] – KooiInc

+0

Công việc này - mặc dù khi phân tích chuỗi truy vấn, tôi phải giải mã hai lần ngay bây giờ. Có vẻ như khi nó được mã hóa một lần, nó sẽ được giải mã bởi trình duyệt nhưng khi nó được mã hóa hai lần thì nó sẽ không được giải mã chút nào. lạ. – rmw

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

Làm việc tốt cho tôi?

2

Phương thức gốc escape thực hiện điều đó. nhưng bạn cũng có thể tạo bộ mã hóa tùy chỉnh như:

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

điều này sẽ thay thế các khóa được sử dụng trong chuỗi truy vấn. hơn nữa, bạn có thể áp dụng nó cho bất kỳ mã hóa tùy chỉnh nào khác bằng cách thêm cặp khóa-giá trị cần thiết.

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..."); 
     } 
} 
Các vấn đề liên quan