天琪 发表于 2023-6-2 21:36:35

记录--让URL地址都变成了"ooooooooo"

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助




发现一个很有创意的小工具网站,如封面图所示功能很简单,就是将一个URL地址转换为都是 ooooooooo 的样子,通过转换后的地址访问可以转换回到原始地址,简单流程如下图所示。转换的逻辑有点像短链平台一样,只不过这个是将你的URL地址变的很长长长长,但是看着都是 ooooooooo,很好奇是如何实现的,所以查阅了源码,本文解读其核心实现逻辑,很有趣且巧妙的实现了这个功能。
前置知识点

在正式开始前,先了解一些需要学习的知识点。因为涉及到两个地址其实也就是字符串之间的转换,会用到一些编码和解码的能力。
将字符转为utf8数组,转换后的每个字符都有一个特定的唯一数值,比如 http 转换后的 utf8 格式数组即是 。
    toUTF8Array(str) {
      var utf8 = [];
      for (var i = 0; i < str.length; i++) {
            var charcode = str.charCodeAt(i);
            if (charcode < 0x80) utf8.push(charcode);
            else if (charcode < 0x800) {
                utf8.push(0xc0 | (charcode >> 6),
                  0x80 | (charcode & 0x3f));
            }
            else if (charcode < 0xd800 || charcode >= 0xe000) {
                utf8.push(0xe0 | (charcode >> 12),
                  0x80 | ((charcode >> 6) & 0x3f),
                  0x80 | (charcode & 0x3f));
            }
            else {
                i++;
                charcode = ((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff)
                utf8.push(0xf0 | (charcode >> 18),
                  0x80 | ((charcode >> 12) & 0x3f),
                  0x80 | ((charcode >> 6) & 0x3f),
                  0x80 | (charcode & 0x3f));
            }
      }
      console.log(utf8, 'utf8');
      return utf8;
    }上面是编码,对应下面的则是解码,将utf8数组转换为字符串,比如  转换后的 utf8 格式数组即是 com。
    Utf8ArrayToStr(array) {      var out, i, len, c;      var char2, char3;      out = "";      len = array.length;      i = 0;      while (i < len) {            c = array;            switch (c >> 4) {                case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:                  // 0xxxxxxx                  out += String.fromCharCode(c);                  break;                case 12: case 13:                  // 110x xxxx   10xx xxxx                  char2 = array;                  out += String.fromCharCode(((c & 0x1F)
页: [1]
查看完整版本: 记录--让URL地址都变成了"ooooooooo"