Помощ за jQuery urlencode/decode patch

Използвам този плъгин jQuery urlencode и urldecode - много прост и лесен за използване, но в оригиналната си форма не премахва + от низа. Единственият коментар на началната страница предлага корекция, но не знам как да я приложа. Може ли някой да ми помогне?

Страницата: 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;}
});

Предложеният пач:

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

Благодаря!


person jay    schedule 29.03.2010    source източник
comment
Как това се различава от encodeURIComponent()?   -  person jholster    schedule 29.03.2010


Отговори (1)


Изобщо не използвайте този плъгин; безсмислено е. Javascript вече поддържа URL кодиране и декодиране с вградени функции (encodeURIComponent и decodeURIComponent). Интервалите се кодират като %20 с този механизъм.

Ако вашият код от страна на сървъра поставя знаци плюс там за интервали, можете да се отървете от тях с проста замяна на регулярен израз, тъй като няма да има никакви „истински“ знаци плюс, за които да се притеснявате (те са кодирани като %2B):

var decoded = decodeURIComponent(encoded.replace(/\+/g, '%20'));
person Pointy    schedule 29.03.2010
comment
Как се обработват + при декодиране, ако низът е кодиран с PHP? - person jay; 29.03.2010
comment
Страхотно @Pointy. Това свърши работа. Има ли причина това да не е в jQuery API? - person jay; 30.03.2010
comment
Предполагам, че тъй като вече е в браузъра, с почти точната функционалност, от която хората се нуждаят, няма причина да се добавя към библиотеката. Всичко с + е странно и не знам защо съществува този проблем. - person Pointy; 30.03.2010