博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
url encode,第一篇博客小记
阅读量:5084 次
发布时间:2019-06-13

本文共 1931 字,大约阅读时间需要 6 分钟。

想想真是汗颜,博客园开通了2年多了,竟然没有正式的写一篇文章;

昨天去一家公司面试,被狠狠的鄙视了一顿,还被批的一无是处;杯具啊,想想还是慢慢的提高自己吧,有口饭吃就好了,不想那么多了。专心的提高,每天用功学习一点,今天尝试写了下url encode,还是东看西抄的;不过,为了显摆一下,还是假装高雅一点,列出来个有点挑战性的参考网址吧,反正我是看着特别不爽,不过,好像也没有了更严谨的参考资料;废话少说,作为第一篇,就不那么讲究了。

URLEncode,顾名思义,就是对URL进行编码;通用的是进行UTF-8进行转码,然后使用百分比编码方式进行编码;至于什么叫UTF-8编码,就是8个二进制位进行编码吧,反正我是至于理解的;不过,为了便于区分是那8个二进制位表示一个字符,并且与原先的ASCII编码进行兼容,便是一个字节字节读取的话,如果第一个字节第一位是0的话,那么就表示,这是一个字节表示的字符,基本可以理解为这个字符是0xxxxxxx这个的,就是编码小于127的;啰嗦了半天,还是列出来一下比较直观,汗,不乱写了;

0xxxxxxx

110xxxxx 10xxxxxx

1110xxxx 10xxxxxx 10xxxxxx

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

而URL Encode就是对A-Z, a-z, -, _, ., ~这几天字符不转换之外,其他的进行UTF-8进行转码,取其16进制的表达形式,前面加上%号,所以别名又叫百分比编码方式;还有一个特别的字符就是空格,一个空格被转换为一个"+",需要特别注意;

闲言少叙,还是贴代码吧:

function encode(str) {

  str = (str || "").replace(/\r\n/g, "\n");

  var out = "", reserved = /[\w\-\.~]/g; //a-zA-Z_-.~

  for (var i = 0; i < str.length; i++) {

    var char = str[i];

     if (reserved.test(char)) {

      out += char;

     }

     else if (char === " ") {

      out += "+";

    }

    else {

      var num = str.charCodeAt(i);

      if (num <= 0x7F) {

        out += "%" + hex(num);

      }

      else if (num <= 0x7FF) {

        out += "%" + hex((num >> 6) | 0xC0);

        out += "%" + hex((num & 0x3F) | 0x80);

      }

       else if (num <= 0xFFFF) {

        out += "%" + hex((num >> 12) | 0xE0);

        out += "%" + hex(((num >> 6) & 0x3F) | 0x80);

        out += "%" + hex((num & 0x3F) | 0x80);

      }

      else { //至于那些特别大,平时也用不到,懒得写了;

        out += "%" + hex((num >> 18) | 0xF0);

        out += "%" + hex(((num >> 12) & 0x3F) | 0x80);

        out += "%" + hex(((num >> 6) & 0x3F) | 0x80);

         out += "%" + hex((num & 0x3F) | 0x80);

      }

    }

  }

  return out;

}

 

function hex(num) {

  return num.toString(16).toUpperCase();

}

参考资料:

转载于:https://www.cnblogs.com/newdefence/archive/2012/02/24/2367276.html

你可能感兴趣的文章
cer证书签名验证
查看>>
synchronized
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
QML学习笔记之一
查看>>
Window 的引导过程
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IOS-图片操作集合
查看>>