首页 / 脚本样式 / JavaScript / node.js中的querystring.unescape方法使用说明
方法说明:
该方法使可用来重写 querystring.parse
语法:
复制代码 代码如下:
querystring.unescape
接收参数:
无
源码:
复制代码 代码如下:
// a safe fast alternative to decodeURIComponent
QueryString.unescapeBuffer = function(s, decodeSpaces) {
var out = new Buffer(s.length);
var state = "CHAR"; // states: CHAR, HEX0, HEX1
var n, m, hexchar;
for (var inIndex = 0, outIndex = 0; inIndex <= s.length; inIndex++) {
var c = s.charCodeAt(inIndex);
switch (state) {
case "CHAR":
switch (c) {
case charCode("%"):
n = 0;
m = 0;
state = "HEX0";
break;
case charCode("+"):
if (decodeSpaces) c = charCode(" ");
// pass thru
default:
out[outIndex++] = c;
break;
}
break;
case "HEX0":
state = "HEX1";
hexchar = c;
if (charCode("0") <= c && c <= charCode("9")) {
n = c - charCode("0");
} else if (charCode("a") <= c && c <= charCode("f")) {
n = c - charCode("a") + 10;
} else if (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");
} else if (charCode("a") <= c && c <= charCode("f")) {
m = c - charCode("a") + 10;
} else if (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;
}
}
// TODO support returning arbitrary buffers.
return out.slice(0, outIndex - 1);
};