2010-03-29 14 views
6

Sto usando questo plugin urlencode e urldecode jQuery - molto semplice e facile da usare ma non, nella sua forma originale, rimuovere + dalla stringa. L'unico commento sulla home page suggerisce una patch ma non so come implementarla. Qualcuno mi può aiutare?jQuery urlencode/decode patch help

pagina: 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;} 
}); 

Il Patch proposto:

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; 
} 

Grazie!

+6

Come funziona questo differiscono da 'encodeURIComponent()'? – jholster

risposta

34

Non utilizzare affatto questo plug-in; è inutile. Javascript supporta già la codifica e la decodifica degli URL con funzioni integrate (encodeURIComponent e decodeURIComponent). Gli spazi sono codificati come% 20 con quel meccanismo.

Se il codice lato server mette segni più in là per gli spazi, si può sbarazzarsi di quelli con una semplice sostituzione regex in quanto non ci sarà alcun "veri" segni più di cui preoccuparsi (sono codificati come % 2B):

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

In che modo '+' viene gestito durante la decodifica se la stringa è stata codificata con PHP? – jay

+0

Vedi modifica; Mi limiterei a sistemare quelli prima di decodificare. – Pointy

+0

Eccellente @Pointy. Questo ha fatto il trucco. Qualche ragione per cui questo non è nell'API jQuery? – jay