经常URL上面需要有不少中文,但直接放置中文容易出现乱码,所以要进行转码,但普通转码后,会发现URL太长了,不便于保存和处理。和朋友讨论以后,觉得可以使用一定的压缩算法,将转码后的中文进行处理,能够明显减少URL的长度,一般能减少50%
代码如下:

//普通2、8、10、16进制自由转换
   function EvalAny(num00, fromRadix, toRadix)
    {
       var num01 = parseInt(num00, fromRadix)
       return num01.toString(toRadix);
    }
    //将某个64以下的数字由10进制转为64进制
   function n10To64(num) {
       if (num < 10) {
           return String.fromCharCode(48 + num);
       } else if (num >= 10 && num <= 35) {
           return String.fromCharCode(55 + num);
       } else if (num >= 36 && num <= 61) {
           return String.fromCharCode(61 + num);
       } else if (num == 62) {
           return "-";
       } else if (num == 63) {
           return "_";
       }
       return "";
    }
    //将某个64以下的数字由64进制转为10进制
   function n64To10(num){
       var j = num.charCodeAt();
       if (num == "_") {
           return 63;
       } else if (num == "-") {
           return 62;
       } else if (j >= 97 && j <= 122) {
           return j - 61;
       } else if (j >= 65 && j <= 90) {
           return j - 55;
       } else if (j >= 48 && j <= 57) {
           return j - 48;
       }
       return "";
    }
    //将16进制数字转换为64进制
   function w16To64(num) {
       var a2 = EvalAny(num, 16, 2);
       while (a2.length < 16) {
           a2 = "0" + a2;
       }
       var b1 = parseInt(EvalAny(a2.substring(0, 4), 2, 10));
       var b2 = parseInt(EvalAny(a2.substring(4, 10), 2, 10));
       var b3 = parseInt(EvalAny(a2.substring(10, 16), 2, 10));
       return n10To64(b1) + n10To64(b2) + n10To64(b3)
    }
    //将64进制数字转换为16进制
   function w64To16(num) {
       var a = 0;
       for (var n = 0; n < num.length; n++) {
           var x = n64To10(num.charAt(n));
           for (var m = 0; m < (num.length - n - 1); m++) {
               x = x * 64;
           }
           a += x;
       }
       var a1 = EvalAny(a, 10, 16);
       while (a1.length < 4) {
           a1 = "0" + a1;
       }
       return a1;
    }
    //汉字、特殊字符等转Unicode编码
   function toUnicode(text)
    {
       text = escape(text.toString()).replace(/\+/g, "%2B");

var matches = text.match(/(%([0-9A-F]{2}))/gi);
       if (matches)
       {
           for (var matchid = 0; matchid < matches.length; matchid++)
           {
               var code = matches[matchid].substring(1, 3);
               text = text.replace(matches[matchid], '%u00' + code);
           }
       }
       return text;
    }
    //将汉字转Unicode码、16进制转64进制、并实现压缩(主函数)
   function toZipUnicode(text)
    {
       text = toUnicode(text);
       var tmp = "";
       for (var i = 0; i < text.length; i++) {
           if (text.charAt(i) == "%" && text.charAt(i + 1) == "u"){
               tmp += w16To64(text.substring(i + 2, i + 6));
               i += 5
           } else {
               tmp += ("$" + text.charAt(i));
           }
       }
       return tmp;
    }
    //将压缩的参数还原汉字(主函数)
   function unZipUnicode(text)
    {
       var tmp = "";
       for (var i = 0; i < text.length; i++) {
           if (text.charAt(i) == "$") {
               tmp += text.substring(i+1, i+2);
               i++
           } else {
               tmp += "\\u" + w64To16(text.substring(i, i+3));
               i+=2;
           }
       }
       var unTmp = "";
       eval_r("unTmp=\""+tmp+"\"");
       return unTmp;
   }

js 64进制转换方法 URL参数压缩相关推荐

  1. 64进制(base64)

    base64相当于64进制 其符号序列为: A...Za...z0...9+/ 一共64个符号,那么A代表0,a代表26,0代表52,/代表63. base64编码的原理: 将3字节转成4个字符,3个 ...

  2. 701-简单易懂的进制转换方法

    生活中的进制 时间转换: 古代的二进制 二进制,八进制,十六进制转为十进制 10进制,8进制,16进制的取数范围如下: 进制转换方法 10进制如何转成8进制或者16进制??? 首先把10进制转成2进制 ...

  3. 10进制和64进制互转

    以前写过16进制和64进制的转换函数,今天做下载页的短连接,突然想到可以吧id转换为64进制,让地址看起来更短,下面是代码,分享给大家.性能测试,1000次计算互转计算,4位64进制数(aaaa:26 ...

  4. 关于计算机的进制转换方法,计算机进制转换方法.doc

    计算机进制转换方法 从小我们就开始学数学数学就有涉及到进制知识相信大家对于进制都不陌生吧进制也就是进位制是一种进位方法现在大家都有电脑利用电脑自带的计算机进行进制转换是最简便的方法下面是由百分网小编为 ...

  5. JavaScript 进制之间的转换、大数或小数精度丢失、js不同进制的表示(分享)

    文章目录 1. toString(radix) 2. parseInt(string, radix) 3. 0.1 + 0.2 !=== 0.3 4. BigInt() 5. js不同进制的表示 1. ...

  6. php 64进制转16进制,PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

    $mtime1= explode(" ", microtime()); $startTime= $mtime1[0] + $mtime1[1];?> 进制转换 2 8 10 ...

  7. java 10进制转64进制_十进制与64进制互相转换算法

    实现代码如下: /** * */ package com.M.controller.test; import java.util.Stack; /** * * @author online zuozu ...

  8. 2020-11-26 python 十进制转64进制

    字符集: table = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_" 方法一: 求余和整除 ...

  9. 十进制(10)与64进制互相转换算法

    十进制(10)与64进制互相转换算法 应用在 网址缩短,增加二维码清晰度 有字数限制的微博,文章分享等 数字的加解密 JAVA实现代码 import java.security.MessageDige ...

最新文章

  1. nginx之upsream实现负载均衡
  2. 多人在线游戏服务器端开发心得(转)
  3. UVA11997求前k个和,多路归并问题
  4. Sigmoid是品优函数吗?
  5. linux系统管理试卷必修B卷,2013-2014Linux系统管理试卷
  6. 关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup...
  7. 工信部:2021年1-2月锂电池产量29.5亿只
  8. 真香!AirPods Pro美国全网脱销,网友:而我内心却毫无波澜
  9. ie下的firebug
  10. 如何快速获知需要的SPS Sql Search语法
  11. 太强了,终于彻底搞懂 Nginx 的五大应用场景~
  12. taobao_seckill_anyi项目配置与运行main.py(7)【图文并茂的小白级教程】
  13. lighttpd移植
  14. Android 内外边距
  15. 数据API开发如何快速上手:先了解什么是数据API生命周期管理
  16. 生命的答案水知道(只有部分图片,要全的图片自己还是的网上下个pdf看吧)
  17. 在Excel实现多关键字批量搜索、批量替换,以及批量添加批注
  18. 旋转的星星_pygame旋转图像实例_作者:李兴球
  19. 《算法4》读书笔记(一)
  20. 瑞幸点燃导火索,兄弟公司神州租车迎大变局

热门文章

  1. (17)Redis 服务器
  2. android 自定义View ----- 类似黄油相机添加文字
  3. 浅析Tomcat结构以及自定义嵌入式Tomcat
  4. 项目管理工具提升开发效率(IDEA+Git)
  5. java ssl证书连接_JAVA连接HTTPS - HTTPS SSL 教程 - 数安时代(GDCA)SSL证书官网
  6. 概率和回归方程——残差和R方
  7. 秋实大哥与线段树 UESTC - 1073
  8. java计算机毕业设计民宿预订管理系统设计与实现源程序+mysql+系统+lw文档+远程调试
  9. 基于Python编写一个B站全自动抽奖的小程序
  10. 多线程的三种实现方法、线程类的常见方法、线程安全问题:synchronized和Lock锁、生产者和消费者问题