2010-03-29 10 views
6

Estoy usando este jQuery urlencode y urldecode plugin - muy simple y fácil de usar pero no, en su forma original, eliminar + de la cadena. El único comentario en la página de inicio sugiere un parche, pero no sé cómo implementarlo. ¿Puede alguien ayudarme?jQuery urlencode/decode parche ayuda

la página: 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;} 
}); 

El parche propuesto:

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

Gracias!

+6

¿Cómo se diferencia esto de 'encodeURIComponent()'? – jholster

Respuesta

34

No use ese complemento en absoluto; Carece de sentido. Javascript ya admite la codificación y decodificación de URL con funciones integradas (encodeURIComponent y decodeURIComponent). Los espacios se codifican como% 20 con ese mecanismo.

Si el código del lado del servidor pone signos más para espacios, puede deshacerse de aquellos con un simple reemplazo de expresiones regulares, ya que no habrá signos más "reales" de los que preocuparse (están codificados como % 2B):

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

¿Cómo se manejan '+' al decodificar si la cadena ha sido codificada con PHP? – jay

+0

Ver edición; Solo arreglaría esos antes de decodificar. – Pointy

+0

Excelente @Pointy. Esto hizo el truco. ¿Hay alguna razón por la que esto no esté en la API de jQuery? – jay

Cuestiones relacionadas