node.js中的querystring.unescape方法使用说明
方法说明:
该方法使可用来重写querystring.parse
语法:
querystring.unescape
接收参数:
无
源码:
//asafefastalternativetodecodeURIComponent QueryString.unescapeBuffer=function(s,decodeSpaces){ varout=newBuffer(s.length); varstate='CHAR';//states:CHAR,HEX0,HEX1 varn,m,hexchar; for(varinIndex=0,outIndex=0;inIndex<=s.length;inIndex++){ varc=s.charCodeAt(inIndex); switch(state){ case'CHAR': switch(c){ casecharCode('%'): n=0; m=0; state='HEX0'; break; casecharCode('+'): if(decodeSpaces)c=charCode(''); //passthru default: out[outIndex++]=c; break; } break; case'HEX0': state='HEX1'; hexchar=c; if(charCode('0')<=c&&c<=charCode('9')){ n=c-charCode('0'); }elseif(charCode('a')<=c&&c<=charCode('f')){ n=c-charCode('a')+10; }elseif(charCode('A')<=c&&c<=charCode('F')){ n=c-charCode('A')+10; }else{ out[outIndex++]=charCode('%'); out[outIndex++]=c; state='CHAR'; break; } break; case'HEX1': state='CHAR'; if(charCode('0')<=c&&c<=charCode('9')){ m=c-charCode('0'); }elseif(charCode('a')<=c&&c<=charCode('f')){ m=c-charCode('a')+10; }elseif(charCode('A')<=c&&c<=charCode('F')){ m=c-charCode('A')+10; }else{ out[outIndex++]=charCode('%'); out[outIndex++]=hexchar; out[outIndex++]=c; break; } out[outIndex++]=16*n+m; break; } } //TODOsupportreturningarbitrarybuffers. returnout.slice(0,outIndex-1); };