一个神奇的小工具 让URL地址都变成了"ooooooooo"
一个神奇的小工具,让URL地址都变成了"ooooooooo"
作者:南城大前端 2023-04-26 01:21:34网络 网络优化 转换的逻辑有点像短链平台一样,只不过这个是将你的URL地址变的很长长长长,但是看着都是 ooooooooo,很好奇是如何实现的,所以查阅了源码,本文解读其核心实现逻辑,很有趣且巧妙的实现了这个功能。发现一个很有创意的小工具网站,如封面图所示功能很简单,就是将一个URL地址转换为都是ooooooooo的样子,通过转换后的地址访问可以转换回到原始地址,简单流程如下图所示。转换的逻辑有点像短链平台一样,只不过这个是将你的URL地址变的很长长长长,但是看着都是ooooooooo,很好奇是如何实现的,所以查阅了源码,本文解读其核心实现逻辑,很有趣且巧妙的实现了这个功能。
前置知识点
在正式开始前,先了解一些需要学习的知识点。因为涉及到两个地址其实也就是字符串之间的转换,会用到一些编码和解码的能力。
「将字符转为utf8数组」,转换后的每个字符都有一个特定的唯一数值,比如http转换后的 utf8 格式数组即是[104, 116, 116, 112]。
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数组转换为字符串」,比如[99, 111, 109]转换后的 utf8 格式数组即是com。
Utf8ArrayToStr(array) {var out, i, len, c;var char2, char3;out = "";len = array.length;i = 0;while (i < len) {c = array[i++];switch (c >> 4) {case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:// 0xxxxxxxout += String.fromCharCode(c);break;case 12: case 13:// 110x xxxx 10xx xxxxchar2 = array[i++];out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));break;case 14:// 1110 xxxx10xx xxxx10xx xxxxchar2 = array[i++];char3 = array[i++];out += String.fromCharCode(((c & 0x0F) << 12) |((char2 & 0x3F) << 6) |((char3 & 0x3F) << 0));break;}}return out;}「将 Number 对象以 4 进制的形式表示为字符串」,toString 用的比较多,但是里面传入参数的场景比较少,这个参数 radix 是一个可选的参数,用于指定转换的进制数,范围为 2 ~ 36,如果未传入该参数,则默认使用 10 进制。
n.toString(4)「在字符串左侧填充指定字符,直到字符串达到指定长度」。基本语法为str.padStart(targetLength [, padString])。
targetLength:必需,指定期望字符串的最小长度,如果当前字符串小于这个长度,则会在左侧使用 padString 进行填充,直到字符串达到指定长度。padString:可选,指定用于填充字符串的字符,默认为 " "(空格)。str.padStart(4, '0')URL 编码/解码
下面正式开始URL编码的逻辑,核心的逻辑如下:
转换为utf8数组转换为4进制并左侧补0到4位数分割转换为字符串数组映射到o的不同形式再次拼接为字符串,即转换完成后的URL// 获取utf8数组let unversioned = this.toUTF8Array(url)// 转换为base 4字符串// padstart非常重要!否则会丢失前导0.map(n => n.toString(4).padStart(4, "0"))// 转换为字符数组.join("").split("")// 映射到o的不同形式.map(x => this.enc[parseInt(x)])// 连接成单个字符串.join("")上面有两个关键点解释一下,首先映射到o的不同形式这个是什么意思呢?其实转换后的o并不是一种“o”,而是4种,只不过我们肉眼看到的效果很像,通过encodeURI转换后的字符可以看出来。
encodeURI('o-ο-о-ᴏ')// o-%CE%BF-%D0%BE-%E1%B4%8F这里其实也解释了为什么上面为什么是转换为4进制和左侧补0到四位数。因为上面代码定义的this.enc如下,因为总共只有四种“o”,4进制只会产生0,1,2,3,这样就可以将转换后的utf8字符一一对应上这几种特殊的“o”。
enc = ["o", "ο", "о", "ᴏ"]最后的效果举例转换http这个字符:
转换为utf8数组:[ 104, 116, 116, 112 ]转换为4进制并左侧补0到4位数:['1220', '1310', '1310', '1300']分割转换为字符串数组:['1', '2', '2', '0', '1', '3', '1', '0', '1', '3', '1', '0', '1', '3', '0', '0']映射到o的不同形式:[ 'ο', 'о', 'о', 'o', 'ο', 'ᴏ', 'ο', 'o', 'ο', 'ᴏ', 'ο', 'o', 'ο', 'ᴏ', 'o', 'o' ]再次拼接为字符串,即转换完成后的URL:οооoοᴏοoοᴏοoοᴏoo到此整个转换编码的过程就结束了,看完后是不是觉得设计的很不错,编码完后就是解码,解码就是将上面的过程倒序来一遍,恢复到最原始的URL地址。这里要注意一点的是每次解析4个字符且parseInt以4进制的方式进行解析。
// 获取url的base 4字符串表示let b4str = ooo.split("").map(x => this.dec[x]).join("")let utf8arr = []// 每次解析4个字符// 记住添加前导0的填充for (let i = 0; i < b4str.length; i += 4)utf8arr.push(parseInt(b4str.substring(i, i + 4), 4))// 返回解码后的字符串return this.Utf8ArrayToStr(utf8arr)最后
到此就核心实现代码就分享结束了,看完是不是感觉并没有很复杂,基于此设计或许可以延伸出其他的字符效果,有兴趣的也可以试试看。将转码后的地址分享给你的朋友们一定会带来不一样的惊喜,下面是我转换的一个AI小工具地址,点击看看效果吧~
官网地址:「ooooooooooooooooooooooo.ooo」
ooooooooooooooooooooooo.ooo/ooooοооoοᴏοoοᴏοoοᴏooοᴏoᴏoᴏооoоᴏᴏoоᴏᴏοоοᴏοоoᴏoоᴏоοоᴏоοоoοοоᴏоοоoᴏοооoοоοοοоᴏоοоοᴏoоᴏоοоοоοᴏοοοоᴏо
责任编辑:武晓燕 来源:南城大前端 工具URL地址推荐系统
电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载
语言:中文版系统大小:2.98GB系统类型:Win8电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
相关文章
- Win10系统怎么回退到win7系统?
- 亲淘添加好友的办法_其它聊天
- U盘重装系统后电脑无法上网怎么解决?
- win10 onedrive_本文教您怎样禁用OneDrive
- 两台电脑如何共享文件呢?
- Win10系统用摄像头录像没声音怎么解决?
- Win10系统安全模式黑屏怎么办?安全模式黑屏解决方法简述
- win7系统打开和关闭窗口动态缩放效果没有了怎么解决?
- win10玩lol出现蓝屏怎样办,本文教您处理win10 lol蓝屏
- win8原版系统下载
- 手机qq浏览器3个g怎么清理详细教程
- 有众APP怎么使用 有众APP使用教程
- win7系统电脑一直提示是盗版怎样办,本文教您怎样
- Win10系统最低设置是啥要求
- Win8如何在资源管理器快速查看系统属性
- 系统一键装机的详细教程
- win8.1右键添加关机选项的详细步骤【详解】
- 开始菜单,本文教您开始菜单无法打开
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1新萝卜家园 GhostWin7 SP1 电脑城极速稳定版2020年5月(32位) ISO镜像高速下载
- 2雨林木风Ghost Win7 64位 旗舰版v2019.08下载
- 3Ghost Win10最新正式版下载_番茄花园 Ghost Win10 64位专业装机版下载
- 4萝卜家园 GHOST XP SP3 端午节特别版 V2016.06 下载
- 5萝卜家园Ghost win10 64位 装机纯净版v2023.10最新下载
- 6深度技术 GHOST WIN7 SP1 X86 专业优化版 V2017.09(32位) 下载
- 7新萝卜家园 Ghost XP SP3系统 电脑城极速装机版 2018年8月 ISO镜像下载
- 8深度技术Ghost Win10 X64 1909专业版 v2023.05免费最新下载
- 9Win11 22000.65微软原版镜像下载_Win11 Dev 22000.65简体中文版下载V2021
- 10笔记本系统Ghost Win8.1 (X64) 中秋特别 全新纯净版2020年9月(永久激活) 提供下载