最新要闻
- 天天即时:《封神三部曲》首部即将上映:制作成本或为16.5亿元
- 如何拍出女朋友最美一面?OPPO Reno10 Pro+评测:长焦人像让直男也会拍照
- 今日关注:不到1斤重!宏碁蜂鸟迷你主机开卖:1499元起
- 安全带又出现问题!韩系豪华品牌捷尼赛思宣布召回G80、GV70等共计1602辆|环球最新
- 比亚迪西安工厂起火 现场浓烟滚滚!官方回应
- 当前短讯!什么可以防电脑辐射_什么防辐射
- 全球短讯!小鹏“掉队”,它究竟做错了什么?
- 单日票房占比超50%!《蜘蛛侠:纵横宇宙》评分解禁:9.0超高分
- 又一“巨无霸”!国产2万吨重载自动驾驶列车试验成功
- 2.9秒下完一部电影!Wi-Fi 7要来了:国内标准已落地
- moto razr 40 ultra为何要装一块超大尺寸外屏?看完明白了
- 中国最深高铁站感受下:仅扶梯垂直高度42米 相当于15层楼 每日动态
- 在西部脱颖而出的丹佛掘金确实是被所有人低估了-今日最新
- 美国登月被指造假 50多年前的通信技术做不到?大V科普|世界播资讯
- Win11新画图推出两年后:承诺的深色模式终于有了|环球速读
- 别执迷不悟!张朝阳:上名牌和一般大学区别不太大 对你一生影响不大
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界快播:记录--让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: // 0xxxxxxx out += String.fromCharCode(c); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = array[i++]; out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = 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/ooooοооoοᴏο…
本文转载于:
https://juejin.cn/post/7225573912670191677
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
关键词:
-
利用jira及confluence的API进行批量操作(查找/更新/导出/备份/删除等)
前言:近期因为某些原因需要批量替换掉jira和confluence中的特定关键字,而且在替换前还希望进行备份(以便
来源: -
Angular Google Charts教程_编程入门自学教程_菜鸟教程-免费教程分享 全球即时看
教程简介GoogleCharts是一个纯粹的基于JavaScript的图表库,旨在通过添加交互式图表功能来增强Web应用程
来源: 世界快播:记录--让URL地址都变成了"ooooooooo"
利用jira及confluence的API进行批量操作(查找/更新/导出/备份/删除等)
Angular Google Charts教程_编程入门自学教程_菜鸟教程-免费教程分享 全球即时看
【天天新视野】财政系统组织申报2023年第二批专项债项目:13领域可用专项债作资本金
看点:商品日报(6月2日):市场风险偏好继续改善 玻璃涨停沪镍纯碱涨超4%
天天即时:《封神三部曲》首部即将上映:制作成本或为16.5亿元
如何拍出女朋友最美一面?OPPO Reno10 Pro+评测:长焦人像让直男也会拍照
今日关注:不到1斤重!宏碁蜂鸟迷你主机开卖:1499元起
安全带又出现问题!韩系豪华品牌捷尼赛思宣布召回G80、GV70等共计1602辆|环球最新
比亚迪西安工厂起火 现场浓烟滚滚!官方回应
当前短讯!什么可以防电脑辐射_什么防辐射
又双叒叕种草了新家装风格?AI帮你家居换装-全球今头条
vul -- Cybero靶机渗透
各大建站方案
今日快看!【解决方法】锐捷路由器配置IP地址,如RSR路由器
失业率下降影响市场甚微 短端日债延续走强
全球短讯!小鹏“掉队”,它究竟做错了什么?
单日票房占比超50%!《蜘蛛侠:纵横宇宙》评分解禁:9.0超高分
又一“巨无霸”!国产2万吨重载自动驾驶列车试验成功
2.9秒下完一部电影!Wi-Fi 7要来了:国内标准已落地
moto razr 40 ultra为何要装一块超大尺寸外屏?看完明白了
中国最深高铁站感受下:仅扶梯垂直高度42米 相当于15层楼 每日动态
2023.06 微信抓包方案 · 亲测可用
ASP.Net Core 刷新界面,内存持续增加不释放问题。
世界焦点!数据展示新利器:雷达图的魅力与优势
在西部脱颖而出的丹佛掘金确实是被所有人低估了-今日最新
美国登月被指造假 50多年前的通信技术做不到?大V科普|世界播资讯
Win11新画图推出两年后:承诺的深色模式终于有了|环球速读
别执迷不悟!张朝阳:上名牌和一般大学区别不太大 对你一生影响不大
iPhone 15 Pro系列屏幕供应商敲定:有三星和LG两家 全球今热点
长沙两摩托车笼中表演时相撞 惊险一幕曝光
焦点速递!H&M关店启示录
nginx在代理到upstream时转换http1.1为http1.0,长连接转为短连接
windows10 查看已连接wifi的密码
执行计划缓存,Prepared Statement性能跃升的秘密_天天速讯
专访:美国操纵G7干预别国事务——访巴西圣保罗州立大学教授保利诺 环球观点
环球看热讯:Apple Watch表带为何那么贵?原因揭开
理想“L6” 被长城给抢先造出来了:仅售23万!
天天新动态:小米汽车多项高层职务调整:前麦格纳高管黄振宇接管汽车供应链
全球速看:百度网盘内测大模型版云一朵智能助理:翻译、找图一句话搞定
599元 联想小新24 FHD高刷屏上架:100Hz刷新率 硬件级护眼_世界快资讯
一文读懂责任分配矩阵,解决你80%的项目难题 播报
今年618最值得买的手机:华为Pocket S限时优惠1000元、12期分期免息 天天即时
西游记主题公园游客吵架“牛魔王”劝架 幸运没人受伤:网友吐槽素质不如妖怪
蔷薇适合种在庭院什么地方?庭院种蔷薇如何养护?
四种立即改善在线安全的方法
国际清算银行:必须加强监管以防止更多银行倒闭|当前报道
热文:幼儿园摆20桌请200孩子吃席庆六一:每桌有龙虾、烧鸡、牛肉
还因续航焦虑不敢买电车吗?极氪001千里续航版交付:纯电1032km-世界动态
原价300元:星巴克家享黑咖啡10包25元大促(不到1折)-环球看点
天天即时:捷豹路虎发布全新品牌Logo!路虎车标从此成“遗产”
学生网购小石头收到7斤巨石 画面很荒谬很搞笑:网友笑谈赚了 当前信息
天天微资讯!OPEN AI接入MidJourney 画图支持GPT4中文智能优化效果惊艳
易基因:DNA羟甲基化和TET酶在胎盘发育和妊娠结局中的作用 | 深度综述_全球快资讯
环球焦点!规则引擎easyRules中组合规则的使用
windows10安装Sinpaste失败的解决
每日报道:社交app源码开发平台基础知识,软件二维码的生成
每日精选:香港特区政府发售近60亿美元绿色债券 增设10年期人民币债券
每日讯息!光华股份:公司电子封装材料用聚酯树脂目前处于小批量试产阶段,进展良好,已形成少量销售
理想车主跑高速 竟让婴儿平躺在副驾驶 网友直呼心真大-世界快资讯
国产性能车天花板!领克03高性能版首发:2.0T榨出350马力 今头条
全球实时:卢伟冰:Redmi K60在2000-3000档无敌 销量甩开友商
给孩子买豪车就差2个亿怎么办?用电锯做一辆!
尼康Z8禁用非原装电池 理由是出于安全考虑 用户:吃相难看
合纵科技:6月1日融资买入289.18万元,融资融券余额1.34亿元
世界即时看!windows10环境下安装RabbitMQ以及延时插件(图文)
RCEP对15个签署国全面生效
24 万辆 比亚迪 5 月赢麻了|今日热门
2999元 创维新款Mini LED显示器上架:4K HDR1000、96W反向充_世界热讯
世界快报:ChatGPT现在正式交到了一名华人手上
世界今亮点!不只比5G好用10倍 华为提出5.5G新战略:把光技术带入每一辆车
首发骁龙6 Gen 1!荣耀X50入网:1.5K OLED双曲屏
男子开咖啡店日入0元:之前一直在打工 突然想创业|滚动
Vue-自定义icon实现_每日快报
甘肃省发行新增专项债券416亿元 有力支持662个项目建设
50项精彩活动让孩子们乐享“六一” 世界新消息
要去月球抢水资源 NASA称美国将率先登月:4名宇航员停留300天|环球热闻
天网预演
12V小电瓶可能把车点着 福特召回超14万辆林肯SUV
全球即时看!16TB机械硬盘跌破千元 国内电商秒杀亚马逊 这价格还海淘?
焦点快看:联想GeekPro G5000锐龙本首发:RTX 4060秒杀价6499元
【世界报资讯】洋子聊球_洋子
巨石强森重拾速度与激情
世界快资讯丨重返世界首富 马斯克已坐私人飞机回国 发推大赞上海工厂及员工
年利率4.15%!苹果版“余额宝”上线 用户吐槽账户钱没了:官方回应
谁来拯救岌岌可危的油价?沙特、俄罗斯减产都带不动 欧美乐见局面|天天通讯
女子为拍照被卷入海中不幸身亡 只为打卡网红地:网友唏嘘不值得
威尔森_关于威尔森的介绍|每日播报
前5个月交易所债市融资超2万亿元 优质主体发行份额将进一步提升
显卡买RTX 4060Ti还是买RTX 3070?
林志颖即将复出 网友喊话:安全最重要!
环球头条:苹果计划扩大中国和印度市场:要在温州、佛山、合肥开新店
5G是高铁 6G就是飞机!中国移动:6G天地一体 感受爽到家|每日视点
儒林外史第六回概括300字(儒林外史第六回概括)
通讯!读改变未来的九大算法笔记01_数据压缩
拉普兰德
8GB显卡杀到1500元档 英特尔发布Arc新驱动:性价比无敌
618直降1000元 小米迷你主机2999元:0.4L体积 媲美Mac Mini 世界新动态
为什么大家爱买彩票了?国内彩票销售创新高 都想中大奖节奏
热讯:哥几个走着人物结局详细版介绍_哥几个走着真正结局