Welcome 微信登录

首页 / 脚本样式 / 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);
};