zoukankan      html  css  js  c++  java
  • url encode,第一篇博客小记

    想想真是汗颜,博客园开通了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();

    }

    参考资料:

    http://en.wikipedia.org/wiki/URL_encoding

    http://en.wikipedia.org/wiki/UTF-8

  • 相关阅读:
    c#基础 里氏转换
    c#基础 base和this的区别,在继承上面
    c#基础值类和引用类型_字符串
    c# 基础字符串
    c#基础-构造函数 this new
    c#基础3-方法的重载静态和非静态,字段属性,方法
    c#基础2-out-ref
    .net的基础知识点
    Xamarin.Form的坑
    weboack 4 tutorial
  • 原文地址:https://www.cnblogs.com/newdefence/p/2367276.html
Copyright © 2011-2022 走看看