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 相关文章推荐
用Javascript实现UTF8编码转换成gb2312编码
Dec 22 Javascript
JavaScript 继承详解(三)
Jul 13 Javascript
JS getMonth()日期函数的值域是0-11
Feb 15 Javascript
基于JQuery的Pager分页器实现代码
Jul 17 Javascript
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
基于JS实现Android,iOS一个手势动画效果
Apr 27 Javascript
JS添加删除DIV的简单实例
Jul 08 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
Nov 21 Javascript
详解Nuxt.js Vue服务端渲染摸索
Feb 08 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 Javascript
axios异步提交表单数据的几种方法
Aug 11 Javascript
vue 解决IOS10低版本白屏的问题
Nov 17 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
php短域名转换为实际域名函数
2011/01/17 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
小程序自定义日历效果
2018/12/29 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
Python文件夹与文件的操作实现代码
2014/07/13 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
windows下python安装pip方法详解
2020/02/10 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
分布式数据库需要考虑哪些问题
2013/12/08 面试题
培训研修方案
2014/06/06 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
学校运动会加油词
2015/07/18 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
浅析python中特殊文件和特殊函数
2022/02/24 Python