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