2010-03-29 30 views
6

Tôi đang sử dụng url urlode và plugin urldecode jQuery này - rất đơn giản và dễ sử dụng nhưng không ở dạng ban đầu, xóa + khỏi chuỗi. Một bình luận trên trang chủ đề xuất một bản vá nhưng tôi không biết cách thực hiện nó. Ai có thể giúp tôi không?Trợ giúp vá/mã hóa url url jQuery

Trang: http://www.digitalbart.com/jquery-and-urlencode/

//URL Encode/Decode 
$.extend({URLEncode:function(c){var o='';var x=0;c=c.toString(); 
var r=/(^[a-zA-Z0-9_.]*)/; 
    while(x<c.length){var m=r.exec(c.substr(x)); 
    if(m!=null && m.length>1 && m[1]!=''){o+=m[1];x+=m[1].length; 
    }else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16); 
    o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;}, 
URLDecode:function(s){var o=s;var binVal,t;var r=/(%[^%]{2})/; 
    while((m=r.exec(o))!=null && m.length>1 && m[1]!=''){ 
    b=parseInt(m[1].substr(1),16); 
    t=String.fromCharCode(b);o=o.replace(m[1],t);}return o;} 
}); 

Patch đề xuất:

function dummy_url_decode(url) { 
// fixed -- + char decodes to space char 
var o = url; 
var binVal, t, b; 
var r = /(%[^%]{2}|\+)/; 
while ((m = r.exec(o)) != null && m.length > 1 && m[1] != '') { 
if (m[1] == '+') { 
t = ' '; 
} else { 
b = parseInt(m[1].substr(1), 16); 
t = String.fromCharCode(b); 
} 
o = o.replace(m[1], t); 
} 
return o; 
} 

Cảm ơn!

+6

Điều này khác với 'encodeURIComponent()' như thế nào? – jholster

Trả lời

34

Không sử dụng plugin đó; nó là vô nghĩa. Javascript đã hỗ trợ mã hóa và giải mã URL với các hàm dựng sẵn (encodeURIComponentdecodeURIComponent). Các không gian được mã hóa dưới dạng% 20 với cơ chế đó.

Nếu mã phía máy chủ của bạn đặt dấu cộng trong đó cho không gian, bạn có thể loại bỏ những người có thay thế regex đơn giản vì sẽ không có bất kỳ dấu hiệu "thực" nào cần phải lo lắng (% 2B):

var decoded = decodeURIComponent(encoded.replace(/\+/g, '%20')); 
+0

Làm cách nào để xử lý '+' khi giải mã nếu chuỗi đã được mã hóa bằng PHP? – jay

+0

Xem chỉnh sửa; Tôi chỉ sửa chữa chúng trước khi giải mã. – Pointy

+0

Tuyệt vời @Pointy. Điều này đã làm các trick. Bất kỳ lý do nào không có trong API jQuery? – jay