node.js中的querystring.unescape方法使用说明


Posted in Javascript onDecember 10, 2014

方法说明:

该方法使可用来重写 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);

};
Javascript 相关文章推荐
jQuery 选择器理解
Mar 16 Javascript
JavaScript中常用的运算符小结
Jan 18 Javascript
JS延迟加载加快页面打开速度示例代码
Dec 30 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
Apr 07 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
Oct 29 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
Dec 24 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 Javascript
axios中cookie跨域及相关配置示例详解
Dec 20 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
vue实现手机端省市区区域选择
Sep 27 Javascript
vuex分模块后,实现获取state的值
Jul 26 Javascript
node.js中的querystring.escape方法使用说明
Dec 10 #Javascript
node.js中的querystring.stringify方法使用说明
Dec 10 #Javascript
node.js中的querystring.parse方法使用说明
Dec 10 #Javascript
node.js中的url.resolve方法使用说明
Dec 10 #Javascript
node.js中的url.parse方法使用说明
Dec 10 #Javascript
node.js中的url.format方法使用说明
Dec 10 #Javascript
node.js中的console.assert方法使用说明
Dec 10 #Javascript
You might like
yii2.0实现创建简单widgets示例
2016/07/18 PHP
浅谈PHP封装CURL
2019/03/06 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
初二生物教学反思
2014/02/03 职场文书
企业元宵节主持词
2014/03/25 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
Python Socket编程详解
2021/04/25 Python
MySQL RC事务隔离的实现
2022/03/31 MySQL