国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了一個(gè)神奇的小工具,讓URL地址都變成了“ooooooooo“。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wè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è)功能。

發(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è)功能。

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

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

在正式開(kāi)始前,先了解一些需要學(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;
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

上面是編碼,對(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;
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

「將 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)
  • 1.

「在字符串左側(cè)填充指定字符,直到字符串達(dá)到指定長(zhǎng)度」?;菊Z(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')
  • 1.

URL 編碼/解碼

下面正式開(kāi)始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("")
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

上面有兩個(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
  • 1.
  • 2.

這里其實(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", "ο", "о", "?"]
  • 1.

最后的效果舉例轉(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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

最后

到此就核心實(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о?оοоοоο?οοοо?о

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-456487.html

到了這里,關(guān)于一個(gè)神奇的小工具,讓URL地址都變成了“ooooooooo“的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 分享一個(gè)比對(duì)圖片是否一致的小工具(來(lái)源: github)

    分享一個(gè)比對(duì)圖片是否一致的小工具(來(lái)源: github)

    運(yùn)行效果圖:? 官網(wǎng):? GitHub - codingfishman/image-diff: 一個(gè)方便的圖片對(duì)比工具 一個(gè)方便的圖片對(duì)比工具. Contribute to codingfishman/image-diff development by creating an account on GitHub. https://github.com/codingfishman/image-diff 優(yōu)缺點(diǎn): 1.采用比對(duì)各色塊是否一致是該工具的核心,會(huì)出現(xiàn)因角度/光線不同而

    2024年02月04日
    瀏覽(23)
  • 一個(gè)基于Excel模板快速生成Excel文檔的小工具

    一個(gè)基于Excel模板快速生成Excel文檔的小工具

    DocumentGenerator是一個(gè)Excel快速生成工具,目標(biāo)以后還能實(shí)現(xiàn)Word、pdf等的文件的生成。該程序獨(dú)立運(yùn)行,可通過(guò)HTTP接口調(diào)用其生成接口。 典型使用場(chǎng)景為如下: 使用者編寫(xiě)模板文件 使用者準(zhǔn)備模板文件的填充JSON數(shù)據(jù)內(nèi)容 使用者通過(guò)網(wǎng)絡(luò)接口調(diào)用該程序服務(wù)完成模板數(shù)據(jù)自動(dòng)

    2024年02月08日
    瀏覽(21)
  • 使用python做了一個(gè)pdf轉(zhuǎn)word的小工具

    使用python做了一個(gè)pdf轉(zhuǎn)word的小工具

    寫(xiě)在前面:近來(lái)工作上一直在處理word excel等文檔的處理;于是利用新學(xué)的python寫(xiě)了一個(gè)小工具 ?1、其實(shí)實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,主要是利用了pdf2docx這個(gè)庫(kù)來(lái)實(shí)現(xiàn) 首先安裝導(dǎo)入pdf2docx庫(kù) ?2、代碼部分: 話不多說(shuō)直接上代碼:

    2024年02月07日
    瀏覽(21)
  • vue中,給一個(gè)URL地址,利用FileSaver.js插件下載文件到本地

    vue中,給一個(gè)URL地址,利用FileSaver.js插件下載文件到本地

    ①首先下載 FileSaver.js 插件??? ②在需要的.vue頁(yè)面引入 ?在HTML中引入 ③ 如果想保存一個(gè)TXT文檔本地 結(jié)果: ? 內(nèi)容: ? ?④ 如果想保存一個(gè)圖片 結(jié)果: ?圖片內(nèi)容: ?如果圖片不允許跨域則會(huì)出現(xiàn)這種情況: ? ⑤下面這個(gè)方法則可以完美的解決跨域問(wèn)題,不光可以下載圖

    2024年02月06日
    瀏覽(122)
  • 如何做一個(gè)快速粉的小紅薯ai繪畫(huà)號(hào)?繪畫(huà)工具篇

    如何做一個(gè)快速粉的小紅薯ai繪畫(huà)號(hào)?繪畫(huà)工具篇

    小貍貓 小程序 新手入門 靈創(chuàng)(原ai畫(huà)了個(gè)畫(huà)) 小程序 新手入門 魔法畫(huà)師 小程序 新手入門 無(wú)界ai(推薦) 小程序/網(wǎng)頁(yè)/app 功能豐富,模型更新快,有非常多的模型、風(fēng)格、參數(shù)可以一鍵調(diào)整,推薦使用。 mewxai(推薦) 小程序 功能簡(jiǎn)單,有非常多的爆款模型,推薦使用。

    2024年02月09日
    瀏覽(19)
  • 【Android取證篇】滲透測(cè)試工具apk2url快速提取APK內(nèi)的IP和URL地址

    【Android取證篇】滲透測(cè)試工具apk2url快速提取APK內(nèi)的IP和URL地址

    通過(guò)滲透測(cè)試工具apk2url快速檢索APK開(kāi)發(fā)過(guò)程中沒(méi)有刪掉的URL地址,來(lái)發(fā)現(xiàn)一些搜索引擎、子域名查找不到的資源,從而進(jìn)一步收集信息查找后臺(tái)等—【蘇小沐】 1、實(shí)驗(yàn)環(huán)境 系統(tǒng)環(huán)境 Windows 11 專業(yè)工作站版,[23H2(22631.3085)] Kali linux ,[v2023.4] apk2url,[v1.2] 2、apk2url功能 apk2

    2024年03月14日
    瀏覽(29)
  • 【瀏覽器】url參數(shù)中的“+”全部變成了空格原因及解決辦法

    背景 今天在獲取其他站點(diǎn)重定向添加到我cms后臺(tái)管理的url參數(shù)時(shí),碰到參數(shù)中的“+”全部變成了空格的情況 原因 是URL中默認(rèn)的將“+”號(hào)轉(zhuǎn)義了 W3C標(biāo)準(zhǔn)規(guī)定,當(dāng)Content-Type為application/x-www-form-urlencoded時(shí),URL中查詢參數(shù)名和參數(shù)值中空格要用加號(hào)+替代,所以幾乎所有使用該規(guī)范

    2024年02月13日
    瀏覽(32)
  • 我把Github上最牛b的Java教程和實(shí)戰(zhàn)項(xiàng)目整合成了一個(gè)PDF文檔

    我把Github上最牛b的Java教程和實(shí)戰(zhàn)項(xiàng)目整合成了一個(gè)PDF文檔

    寫(xiě)在前面 大家都知道 Github 是一個(gè)程序員福地,這里有各種厲害的開(kāi)源框架、軟件或者教程。這些東西對(duì)于我們學(xué)習(xí)和進(jìn)步有著莫大的進(jìn)步,所以我有了這個(gè)將 Github 上非常棒的 Java 開(kāi)源項(xiàng)目整理下來(lái)的想法。覺(jué)得不錯(cuò)的話,歡迎小伙伴們?nèi)tar一波。 很多小伙伴都不知道學(xué)習(xí)

    2024年02月04日
    瀏覽(23)
  • 一個(gè)含不少免費(fèi)額度和數(shù)據(jù)下載的IP地址來(lái)源查詢工具

    一個(gè)含不少免費(fèi)額度和數(shù)據(jù)下載的IP地址來(lái)源查詢工具

    大家好,我是TJ君! 如今在國(guó)內(nèi)運(yùn)營(yíng)的各種互聯(lián)網(wǎng)應(yīng)用都有接入IP來(lái)源顯示的要求,現(xiàn)在相關(guān)API的供應(yīng)商也很多。今天TJ剛好看到一個(gè)不錯(cuò)的,所以馬上給大家推薦一下。 這款不錯(cuò)的產(chǎn)品名稱為: IPInfo 該IP查詢工具除了傳統(tǒng)的提供地址位置之外,還有很多其他能力,具體的這

    2024年02月08日
    瀏覽(34)
  • 網(wǎng)卡ip地址突然變成169.254.xxx.xxx怎么辦?

    電腦連接路由器上不去網(wǎng),但是手機(jī)可以上 ,IP地址變成了169.254.xxx.xxx,現(xiàn)在我分享下自己的解決方法!不一定百分百都能解決 ,基本上百分之80都是這個(gè)問(wèn)題。 1、首先確認(rèn) 路由器? DHCP 服務(wù)已經(jīng)打卡 路由器地址一般都是 192.168.1.1。當(dāng)然一般這個(gè)情況 故障電腦是進(jìn)不去路由

    2024年02月08日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包