精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一個(gè)神奇的小工具,讓URL地址都變成了"ooooooooo"

網(wǎng)絡(luò) 網(wǎng)絡(luò)優(yōu)化
轉(zhuǎn)換的邏輯有點(diǎn)像短鏈平臺(tái)一樣,只不過(guò)這個(gè)是將你的URL地址變的很長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng),但是看著都是 ooooooooo,很好奇是如何實(shí)現(xiàn)的,所以查閱了源碼,本文解讀其核心實(shí)現(xiàn)邏輯,很有趣且巧妙的實(shí)現(xiàn)了這個(gè)功能。

發(fā)現(xiàn)一個(gè)很有創(chuàng)意的小工具網(wǎng)站,如封面圖所示功能很簡(jiǎn)單,就是將一個(gè)URL地址轉(zhuǎn)換為都是 ooooooooo 的樣子,通過(guò)轉(zhuǎn)換后的地址訪問(wèn)可以轉(zhuǎn)換回到原始地址,簡(jiǎn)單流程如下圖所示。轉(zhuǎn)換的邏輯有點(diǎn)像短鏈平臺(tái)一樣,只不過(guò)這個(gè)是將你的URL地址變的很長(zhǎng)長(zhǎng)長(zhǎng)長(zhǎng),但是看著都是 ooooooooo,很好奇是如何實(shí)現(xiàn)的,所以查閱了源碼,本文解讀其核心實(shí)現(xiàn)邏輯,很有趣且巧妙的實(shí)現(xiàn)了這個(gè)功能。

圖片

前置知識(shí)點(diǎn)

在正式開始前,先了解一些需要學(xué)習(xí)的知識(shí)點(diǎn)。因?yàn)樯婕暗絻蓚€(gè)地址其實(shí)也就是字符串之間的轉(zhuǎn)換,會(huì)用到一些編碼和解碼的能力。

「將字符轉(zhuǎn)為utf8數(shù)組」,轉(zhuǎn)換后的每個(gè)字符都有一個(gè)特定的唯一數(shù)值,比如 http 轉(zhuǎn)換后的 utf8 格式數(shù)組即是 [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;
    }

上面是編碼,對(duì)應(yīng)下面的則是解碼,「將utf8數(shù)組轉(zhuǎn)換為字符串」,比如 [99, 111, 109] 轉(zhuǎn)換后的 utf8 格式數(shù)組即是 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 對(duì)象以 4 進(jìn)制的形式表示為字符串」,toString 用的比較多,但是里面?zhèn)魅雲(yún)?shù)的場(chǎng)景比較少,這個(gè)參數(shù) radix 是一個(gè)可選的參數(shù),用于指定轉(zhuǎn)換的進(jìn)制數(shù),范圍為 2 ~ 36,如果未傳入該參數(shù),則默認(rèn)使用 10 進(jìn)制。

n.toString(4)

「在字符串左側(cè)填充指定字符,直到字符串達(dá)到指定長(zhǎng)度」。基本語(yǔ)法為 str.padStart(targetLength [, padString])。

  • targetLength:必需,指定期望字符串的最小長(zhǎng)度,如果當(dāng)前字符串小于這個(gè)長(zhǎng)度,則會(huì)在左側(cè)使用 padString 進(jìn)行填充,直到字符串達(dá)到指定長(zhǎng)度。
  • padString:可選,指定用于填充字符串的字符,默認(rèn)為 " "(空格)。
str.padStart(4, '0')

URL 編碼/解碼

下面正式開始URL編碼的邏輯,核心的邏輯如下:

  • 轉(zhuǎn)換為utf8數(shù)組
  • 轉(zhuǎn)換為4進(jìn)制并左側(cè)補(bǔ)0到4位數(shù)
  • 分割轉(zhuǎn)換為字符串?dāng)?shù)組
  • 映射到o的不同形式
  • 再次拼接為字符串,即轉(zhuǎn)換完成后的URL
// 獲取utf8數(shù)組
let unversioned = this.toUTF8Array(url)
    // 轉(zhuǎn)換為base 4字符串
    // padstart非常重要!否則會(huì)丟失前導(dǎo)0
    .map(n => n.toString(4).padStart(4, "0"))
    // 轉(zhuǎn)換為字符數(shù)組
    .join("").split("")
    // 映射到o的不同形式
    .map(x => this.enc[parseInt(x)])
    // 連接成單個(gè)字符串
    .join("")

上面有兩個(gè)關(guān)鍵點(diǎn)解釋一下,首先映射到o的不同形式這個(gè)是什么意思呢?其實(shí)轉(zhuǎn)換后的o并不是一種“o”,而是4種,只不過(guò)我們?nèi)庋劭吹降男Ч芟瘢ㄟ^(guò) encodeURI 轉(zhuǎn)換后的字符可以看出來(lái)。

encodeURI('o-ο-о-?')
// o-%CE%BF-%D0%BE-%E1%B4%8F

這里其實(shí)也解釋了為什么上面為什么是轉(zhuǎn)換為4進(jìn)制和左側(cè)補(bǔ)0到四位數(shù)。因?yàn)樯厦娲a定義的 this.enc 如下,因?yàn)榭偣仓挥兴姆N“o”,4進(jìn)制只會(huì)產(chǎn)生0,1,2,3,這樣就可以將轉(zhuǎn)換后的utf8字符一一對(duì)應(yīng)上這幾種特殊的“o”。

enc = ["o", "ο", "о", "?"]

最后的效果舉例轉(zhuǎn)換 http 這個(gè)字符:

  • 轉(zhuǎn)換為utf8數(shù)組:[ 104, 116, 116, 112 ]
  • 轉(zhuǎn)換為4進(jìn)制并左側(cè)補(bǔ)0到4位數(shù):['1220', '1310', '1310', '1300']
  • 分割轉(zhuǎn)換為字符串?dāng)?shù)組:['1', '2', '2', '0', '1', '3', '1', '0', '1', '3', '1', '0', '1', '3', '0', '0']
  • 映射到o的不同形式:[ 'ο', 'о', 'о', 'o', 'ο', '?', 'ο', 'o', 'ο', '?', 'ο', 'o', 'ο', '?', 'o', 'o' ]
  • 再次拼接為字符串,即轉(zhuǎn)換完成后的URL:οооoο?οoο?οoο?oo

到此整個(gè)轉(zhuǎn)換編碼的過(guò)程就結(jié)束了,看完后是不是覺(jué)得設(shè)計(jì)的很不錯(cuò),編碼完后就是解碼,解碼就是將上面的過(guò)程倒序來(lái)一遍,恢復(fù)到最原始的URL地址。這里要注意一點(diǎn)的是每次解析4個(gè)字符且parseInt以4進(jìn)制的方式進(jìn)行解析。

// 獲取url的base 4字符串表示
let b4str = ooo.split("").map(x => this.dec[x]).join("")

let utf8arr = []
// 每次解析4個(gè)字符
// 記住添加前導(dǎo)0的填充
for (let i = 0; i < b4str.length; i += 4)
    utf8arr.push(parseInt(b4str.substring(i, i + 4), 4))
// 返回解碼后的字符串
return this.Utf8ArrayToStr(utf8arr)

最后

到此就核心實(shí)現(xiàn)代碼就分享結(jié)束了,看完是不是感覺(jué)并沒(méi)有很復(fù)雜,基于此設(shè)計(jì)或許可以延伸出其他的字符效果,有興趣的也可以試試看。將轉(zhuǎn)碼后的地址分享給你的朋友們一定會(huì)帶來(lái)不一樣的驚喜,下面是我轉(zhuǎn)換的一個(gè)AI小工具地址,點(diǎn)擊看看效果吧~

官網(wǎng)地址:「ooooooooooooooooooooooo.ooo」

ooooooooooooooooooooooo.ooo/ooooοооoο?οoο?οoο?ooο?o?o?ооoо??oо??οоο?οоo?oо?оοо?оοоoοοо?оοоo?οооoοоοοοо?оοоο?oо?оοоοоο?οοοо?о

責(zé)任編輯:武曉燕 來(lái)源: 南城大前端
相關(guān)推薦

2022-12-28 12:29:45

duf命令

2017-07-25 14:20:13

戴爾配置功耗

2022-03-30 15:11:26

Python房?jī)r(jià)工具

2012-02-16 10:12:23

JavaScript

2011-05-03 10:17:25

CSS

2013-03-29 14:46:33

App開發(fā)小工具輔助工具

2021-05-10 11:06:31

Python工具代碼

2017-05-23 20:44:36

Linux緩存工具

2021-05-20 11:30:17

Python工具代碼

2020-11-26 12:05:44

Python小工具代碼

2020-08-25 20:10:53

GitHub代碼開發(fā)者

2009-11-19 08:48:10

Windows 7桌面工具

2021-11-05 06:57:50

架構(gòu)工具代碼

2016-09-01 08:36:27

Windows 10離線小工具

2020-06-19 09:40:57

程序員遠(yuǎn)程開發(fā)者

2023-12-20 07:41:41

2009-12-08 14:02:25

Windows 7小工

2010-07-01 10:24:30

UML小工具

2024-10-11 14:33:15

ReactRemix用戶

2022-09-08 11:33:47

token釘釘打卡小工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

五月综合激情婷婷六月色窝| 激情综合网最新| 亚洲欧美日韩精品久久奇米色影视| 日韩手机在线观看视频| 麻豆免费在线观看| 成人黄色一级视频| 国产精品2018| 久久综合亚洲色hezyo国产| 日韩三级视频| 69成人精品免费视频| 丁香色欲久久久久久综合网| 肉丝一区二区| 韩国精品免费视频| 精品国产伦一区二区三区观看说明| 国产亚洲欧美在线| 成人在线观看av| 波多野结衣大片| 韩国在线一区| www.亚洲天堂| 性久久久久久久久久| 国产在线一区不卡| 欧美性猛交xxxxx免费看| 日本黄色a视频| 国产在线91| 成人午夜精品在线| 亚洲电影在线一区二区三区| 国产精品99久| 国产成人精品久久二区二区| 欧美久久久久久久久久久久| 青青草原综合久久大伊人精品 | 欧美 国产 精品| 蜜桃视频在线播放| 成人的网站免费观看| 成人av在线天堂| 久久久久久亚洲av无码专区| 在线成人h网| 精品国产一区二区三区四区在线观看| 日韩av在线看免费观看| 精品国产乱子伦一区二区| 欧美精品在线一区二区| 欧美成人黑人猛交| 绿色成人影院| 欧美日韩国产综合视频在线观看中文 | 国产色视频在线| 麻豆成人久久精品二区三区小说| 日本一区二区三区在线播放| 伊人久久综合视频| 在线播放一区| 午夜精品久久久久久久99热浪潮| 欧美极品aaaaabbbbb| 91精品啪在线观看国产81旧版| 国产精品theporn| 欧美性猛交xxxx富婆弯腰| 国产综合中文字幕| 999福利在线视频| 亚洲高清视频在线| 欧美国产日韩激情| 69av成人| 性做久久久久久| 黄色大片中文字幕| 国模私拍一区二区国模曼安| 午夜av一区二区| 成人在线观看你懂的| 色yeye免费人成网站在线观看| 自拍偷在线精品自拍偷无码专区| 中文字幕欧美日韩一区二区| 毛片免费不卡| 亚洲你懂的在线视频| 国产内射老熟女aaaa| 日本伦理一区二区| 偷拍日韩校园综合在线| 免费黄色特级片| 国产精品第一国产精品| 91麻豆精品国产自产在线| 古装做爰无遮挡三级聊斋艳谭| 欧美黄色一级| 亚洲精品日韩在线| 五月激情四射婷婷| 欧美精品入口| 2021国产精品视频| 中文字幕av免费观看| 精品亚洲成a人| 国产精品久久久对白| 深夜福利视频在线免费观看| 国产日韩欧美高清在线| 黄瓜视频免费观看在线观看www | 91高清免费在线观看| 亚洲成人av影片| 久久er精品视频| 国产精品久久久久免费| 黄色大片在线看| 日韩毛片高清在线播放| 国产一线二线三线女| 另类专区亚洲| 欧美一区二区在线视频| 日韩欧美你懂的| 极品粉嫩国产18尤物| 亚洲人免费短视频| 日韩午夜激情电影| 波多野结衣片子| 欧美韩日精品| 国产suv精品一区二区| 99这里有精品视频| 国产婷婷一区二区| 国产女教师bbwbbwbbw| 成人在线爆射| 亚洲国产精品电影在线观看| 日韩影视一区二区三区| 激情久久久久久久| 国产日韩一区在线| 青青操视频在线| 一区二区三区在线影院| 美女福利视频在线| 第四色在线一区二区| 一区二区福利视频| 日本少妇bbwbbw精品| 久草中文综合在线| 日韩欧美激情一区二区| 538在线观看| 这里只有精品免费| 欧洲美熟女乱又伦| 99亚洲视频| 99精彩视频| 色大18成网站www在线观看| 欧美性猛交xxxx久久久| 野战少妇38p| 国产精品黑丝在线播放| 国产成人自拍视频在线观看| 色窝窝无码一区二区三区成人网站| 中文字幕在线一区二区三区| 久久精品网站视频| 日韩欧美黄色| 992tv在线成人免费观看| 亚洲av无码乱码国产精品久久| 国产精品美女一区二区| 性欧美极品xxxx欧美一区二区| 日韩深夜福利| 国产91成人在在线播放| 欧美 日韩 国产 在线| 亚洲激情男女视频| 日本r级电影在线观看| 欧美独立站高清久久| 国产精品99免视看9| 久久久久久久久亚洲精品| 午夜国产精品影院在线观看| 日韩中文有码在线视频| av激情在线观看| 日韩在线观看一区二区| 欧美精品一区二区三区四区五区 | 亚洲av无码一区东京热久久| 在线中文字幕亚洲| 91免费观看网站| sm国产在线调教视频| 91麻豆精品91久久久久久清纯| 国产欧美小视频| 久久99精品久久只有精品| 这里只有精品66| 天堂va欧美ⅴa亚洲va一国产| 久久成年人视频| av中文字幕观看| 亚洲在线观看免费| 亚洲一级av无码毛片精品| 国产视频一区三区| 日本不卡免费新一二三区| 99只有精品| 日韩视频在线免费观看| 国产乱码一区二区| 一区二区三区中文字幕在线观看| 日本wwww色| 亚洲激情网站| 日本成人黄色| 电影91久久久| 欧美激情一区二区三区高清视频 | 成人羞羞视频播放网站| 久久九九精品99国产精品| 国产99久一区二区三区a片| 一区二区高清免费观看影视大全| 精人妻一区二区三区| 在线亚洲激情| 涩涩涩999| 欧美午夜在线播放| 97久久久久久| 91网在线播放| 精品国产伦一区二区三区免费| 国产成人一区二区三区影院在线| 国产日韩亚洲欧美综合| 中文字幕第一页在线视频| 亚洲婷婷免费| 日韩久久精品一区二区三区| 国产在线一区不卡| 欧美一级视频一区二区| 蜜桃视频在线观看www社区| 亚洲国产成人精品一区二区| 精品一区二三区| 一区二区三区不卡在线观看| 一区二区黄色片| 国产精品1区2区3区在线观看| 鲁一鲁一鲁一鲁一澡| 97精品国产| 免费久久99精品国产自| 国产精品亚洲一区二区在线观看 | www.国产高清| 成人欧美一区二区三区白人| v天堂中文在线| 久久av资源站| 国产第一页视频| 欧美成人一品| 日韩精品一区二区三区外面| 一区二区精彩视频| 国产免费观看久久黄| 亚洲v.com| 欧美人在线视频| a视频网址在线观看| 日韩av一区在线| 国产wwwxxx| 欧美欧美欧美欧美首页| 国产原创视频在线| 亚洲国产成人91porn| 任我爽在线视频| 国产人妖乱国产精品人妖| 成人午夜精品无码区| 国模少妇一区二区三区| 美女一区二区三区视频| 欧美综合国产| 9久久9毛片又大又硬又粗| 狠狠色综合网| 日本免费黄色小视频| 久久中文字幕av| 日韩中文字幕av在线| 网红女主播少妇精品视频| 国产精品免费在线| 欧美三级一区| 91影视免费在线观看| 日本久久二区| 国产欧美精品在线播放| 日本精品另类| 国产精品视频公开费视频| 电影亚洲精品噜噜在线观看| 51视频国产精品一区二区| a级片在线免费| 久久久免费高清电视剧观看| 欧美videosex性欧美黑吊| 九九久久综合网站| 黄色成人在线网| 久久久久国产一区二区三区| 中文字幕在线观看二区| 国产美女撒尿一区二区| 亚洲iv一区二区三区| va天堂va亚洲va影视| 国产免费久久av| www.成人| 高清国产在线一区| 国产精品视屏| 久久精品aaaaaa毛片| 婷婷精品在线观看| 欧美一级二级三级| 日韩大片在线观看| 在线观看免费91| 亚洲h色精品| 国产91在线亚洲| 亚洲特级毛片| 国产淫片av片久久久久久| 日韩不卡一区二区| 天天摸天天舔天天操| 国产精品中文有码| av免费观看不卡| 97精品国产露脸对白| 亚洲精品国产精品国自产网站| 欧美激情在线免费观看| 国产黄色录像片| 一区二区免费视频| 国产专区第一页| 欧美日韩午夜在线| 国内精品国产成人国产三级| 亚洲电影第1页| 可以在线观看的黄色| 色av中文字幕一区| 91福利国产成人精品播放| 一区二区三区短视频| 日本午夜人人精品| 啪啪av大全导航福利综合导航| 91视频国产高清| 人妖一区二区三区| 亚洲精品国精品久久99热 | 中文字幕亚洲综合久久五月天色无吗''| 国产区二精品视| 国产精品午夜一区二区三区| 一本一本a久久| 国产主播一区| 超碰在线97免费| 国产91对白在线观看九色| jizz中文字幕| 亚洲一区中文在线| 伊人免费在线观看| 欧美va天堂va视频va在线| 国产乱视频在线观看| 欧美大尺度在线观看| 美女福利一区二区三区| 成人黄色免费网站在线观看| 啪啪激情综合网| 91免费视频黄| 三级欧美韩日大片在线看| 中文在线字幕观看| 国产精品拍天天在线| 国产精彩视频在线| 欧美日韩另类国产亚洲欧美一级| 黄色三级网站在线观看| 美女黄色成人网| 国产精品一区在线播放| 色综合久久网| 超碰网在线观看| 国产很黄免费观看久久| 欧美亚洲色综久久精品国产| 婷婷开心激情综合| 性生活免费网站| 日韩在线视频网站| 日韩一级二级| 久久国产精品高清| 激情欧美丁香| 日本黄色一级网站| 国产精品成人免费精品自在线观看 | 欧美成人精品在线| 欧美三级电影网址| 日本视频一区二区在线观看| 99国产精品久久久久久久| 精品无码av一区二区三区不卡| 国产精品久久久久婷婷二区次| 区一区二在线观看| 精品中文字幕久久久久久| 中文字幕免费高清电视剧网站在线观看 | 国产91av在线| 亚洲AV无码国产成人久久| 成人激情综合网站| 91高清免费看| 欧美日韩美少妇| porn视频在线观看| 国产精品99导航| 色棕色天天综合网| 国产精品日日做人人爱| 成人精品一区二区| 欧美一区在线直播| 日韩高清成人在线| 亚洲成人精品久久久| 亚洲一二三在线观看| 欧美天堂一区二区三区| 久久精品国产亚洲a∨麻豆| 欧美一区二区三区图| 日本成人7777| 韩国日本在线视频| 国产亚洲精品超碰| 中文字幕 国产| 中文字幕亚洲欧美一区二区三区| 99久久综合国产精品二区| 亚洲精品视频一二三| 久久精品国产77777蜜臀| 秋霞欧美一区二区三区视频免费| 欧美日韩高清影院| 黄页视频在线播放| 97久久精品午夜一区二区| 在线观看视频日韩| 成人精品在线观看视频| 日韩欧美亚洲成人| av中文字幕一区二区三区| 国产日韩欧美视频| 最新欧美人z0oozo0| 成人欧美精品一区二区| 亚洲超碰精品一区二区| 天堂91在线| 国产精品h在线观看| 91日韩在线| 亚洲欧美一区二区三区不卡| 亚洲午夜影视影院在线观看| 视频一区二区三区国产| 国产精品久久一区主播| 亚洲色图欧美| 日韩少妇一区二区| 一本到不卡免费一区二区| 欧美18一19xxx性| 国产免费高清一区| 老**午夜毛片一区二区三区| 欧美性生给视频| 亚洲级视频在线观看免费1级| 欧美艳星kaydenkross| 影音先锋在线亚洲| 成人不卡免费av| 中文在线免费看视频| 久久99亚洲热视| 国产高清视频免费| 色美美综合视频| 韩国av网站在线| 久久久一本精品99久久精品| 麻豆精品视频在线观看视频| 久久久久久国产精品免费播放| 亚洲欧美一区二区三区四区 | 国产日韩精品久久| 青青草91视频| 国产手机在线视频| 久久精品国产清自在天天线 | 亚洲欧美日韩精品| 精品欧美视频|