2010-03-29 4 views
6

이 jQuery urlencode 및 urldecode 플러그인을 사용하고 있습니다. 매우 간단하고 사용하기 쉽지만 원래 형태로는 문자열에서 +을 제거하지 않습니다. 홈 페이지의 한 의견은 패치를 제안하지만 구현 방법을 모르겠습니다. 누구든지 나를 도울 수 있습니까?jQuery urlencode/decode patch help

페이지 : 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; 
} 

감사합니다!

+6

이것은 'encodeURIComponent()'와 어떻게 다른가요? – jholster

답변

34

해당 플러그인을 전혀 사용하지 마십시오. 그것은 무의미합니다. Javascript는 이미 내장 된 기능 (encodeURIComponentdecodeURIComponent)을 사용하여 URL 인코딩 및 디코딩을 지원합니다. 공백은 그 메커니즘으로 % 20으로 인코딩됩니다.

서버 측 코드에서 더하기 기호를 공백으로 넣으면 걱정할 "실제"더하기 기호가 없기 때문에 간단한 정규식 대체 기호를 제거 할 수 있습니다 (코드로 인코딩 됨). % 2B) :

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

문자열이 PHP로 인코딩 된 경우 어떻게 해독 할 때'+'가 처리됩니까? – jay

+0

편집을 참조하십시오. 나는 해독하기 전에 그것들을 고쳐 썼다. – Pointy

+0

우수 @ 포인트. 이것은 트릭을했다. jQuery API에없는 이유는 무엇입니까? – jay