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

URL編碼和Base64編碼

這篇具有很好參考價(jià)值的文章主要介紹了URL編碼和Base64編碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


前言

數(shù)據(jù)操作過程中,經(jīng)常涉及到編碼與解碼等相關(guān)操作,如web請(qǐng)求時(shí)會(huì)對(duì)url進(jìn)行編碼,其中的中文等字符會(huì)轉(zhuǎn)義為其他內(nèi)容;中文字符串?dāng)?shù)據(jù)傳輸時(shí),會(huì)將其使用base64編碼并在接收后解碼,以避免亂碼的出現(xiàn)。


一、URL編碼

1. URLEncoder和URLDecoder

URLDecoder 和 URLEncoder 用于普通字符串 和 application/x-www-form-urlencoded MIME 字符串之間的相互轉(zhuǎn)換。

當(dāng)URL地址里包含非西歐字符的字符串時(shí),瀏覽器會(huì)將這些非西歐字符串轉(zhuǎn)換成application/x-www-form-urlencoded MIME 字符串。

  • URLDecoder類包含一個(gè)decode(String s,String enc)靜態(tài)方法,它可以將application/x-www-form-urlencoded MIME字符串轉(zhuǎn)成普通字符串;
  • URLEncoder類包含一個(gè)encode(String s,String enc)靜態(tài)方法,它可以將普通字符串轉(zhuǎn)換成application/x-www-form-urlencoded MIME字符串。

2. URL編碼規(guī)則

對(duì) String 編碼時(shí),使用以下規(guī)則:

  • 字母、數(shù)字和字符, “a” 到 “z”、”A” 到 “Z” 和 “0” 到 “9” 保持不變;
  • 特殊字符 “.”、”-“、”*” 和 “_” 保持不變;
  • 空格字符 ” ” 轉(zhuǎn)換為一個(gè)加號(hào) “+”;
  • url編碼時(shí)會(huì)將 + 編碼成空格;
  • 除此之外,所有的其他字符都是不安全的,會(huì)變成以 % 開頭的字符;
  • 對(duì)于一個(gè)中文,會(huì)使用3個(gè)字節(jié)表示。

由于以上限制內(nèi)容,因此URL編碼是一種限制性編碼方式。

3. Javascript 原生提供三對(duì) Url編碼 的函數(shù)

Javascript中提供了3對(duì)函數(shù)用來將不安全不合法的Url字符轉(zhuǎn)換為合法的Url字符表示 ,它們分別是:

  • escape / unescape
  • encodeURI / decodeURI
  • encodeURIComponent / decodeURIComponent

由于解碼和編碼的過程是可逆的,因此這里只解釋編碼的過程。

3.1 三對(duì)函數(shù)的不同點(diǎn)

(1) 安全字符不同

下面列出了這三個(gè)函數(shù)的安全字符(即函數(shù)不會(huì)對(duì)這些字符進(jìn)行編碼):

  • escape(69個(gè)):*/@±._0-9a-zA-Z
  • encodeURI(82個(gè)):!#$&'()*+,/:;=?@-._~0-9a-zA-Z
  • encodeURIComponent(71個(gè)):!'()*-._~0-9a-zA-Z

(2) 兼容性不同

escape函數(shù)是從Javascript 1.0的時(shí)候就存在了,其他兩個(gè)函數(shù)是在Javascript 1.5才引入的。但是由于Javascript 1.5已經(jīng)非常普及了,所以實(shí)際上使用encodeURI和encodeURIComponent并不會(huì)有什么兼容性問題。

(3) 對(duì)Unicode字符的編碼方式不同

escape 和 encodeURI / encodeURIComponent 不是同一類。

簡(jiǎn)單來說,escape 是對(duì)字符串進(jìn)行編碼, 而另外兩種是對(duì)URL進(jìn)行編碼,作用是讓它們?cè)谒须娔X上可讀。編碼之后的效果是%XX或者%uXXXX這種形式。其中 ASCII字母,數(shù)字 ,@*/+ 這幾個(gè)字符不會(huì)被編碼,其余的都會(huì)。

注意:當(dāng)需要對(duì)URL編碼時(shí),請(qǐng)忘記這個(gè)方法,這個(gè)方法是針對(duì)字符串使用的,不適用于URL。

(4) 適用場(chǎng)合不同

encodeURI 被用作對(duì)一個(gè)完整的URI進(jìn)行編碼,而 encodeURIComponent 被用作對(duì)URI的一個(gè)組件進(jìn)行編碼。

對(duì)URL編碼是常見的事,所以這兩個(gè)方法應(yīng)該是實(shí)際中要特別注意的。它們都是編碼URL,唯一區(qū)別就是 編碼的字符范圍

  • encodeURI 方法不會(huì)對(duì)下列字符編碼:ASCII字母 ,數(shù)字 , ~!@#$&*()=:/,;?+’
  • encodeURIComponent 方法不會(huì)對(duì)下列字符編碼 :ASCII字母 ,數(shù)字 , ~!*()’

所以 encodeURIComponentencodeURI 編碼的范圍更大。

實(shí)際例子來說,encodeURIComponent 會(huì)把 http:// 編碼成 http%3A%2F%2F ,而encodeURI 卻不會(huì)。

3.2 總結(jié)

總的來說,最重要的是什么場(chǎng)合應(yīng)該用什么方法:

  1. 如果只是編碼 字符串,和URL沒有關(guān)系,那么使用 escape
  2. 如果需要編碼 整個(gè)URL,并需要使用這個(gè)URL,那么用 encodeURI;

例如:

 encodeURI("http://www.cnblogs.com/hl/some other thing");

編碼后會(huì)變?yōu)椋?/p>

"http://www.cnblogs.com/hl/some%20other%20thing";

其中,空格被編碼成了%20。但是如果你用了encodeURIComponent,那么結(jié)果變?yōu)?“http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2Fsome%20other%20thing”
看到區(qū)別了嘛?連 “/” 都被編碼了,整個(gè)URL已經(jīng)沒法用了。

  1. 如果需要編碼 URL中的參數(shù),使用 encodeURIComponent 是最好方法。
// param為參數(shù)
let param = "http://www.cnblogs.com/season-huang/"; 

param = encodeURIComponent(param);

let url = "http://www.cnblogs.com?next=" + param;
console.log(url);
// "http://www.cnblogs.com?next=http%3A%2F%2Fwww.cnblogs.com%2Fseason-huang%2F

看到了吧,參數(shù)中的 “/” 可以編碼,如果用 encodeURI 肯定要出問題,因?yàn)楹竺娴?/ 是需要編碼的。

二、Base64編碼

1. Base64編碼規(guī)則

Base64是一種將二進(jìn)制數(shù)據(jù)用文本表示的編碼算法,它只包含64個(gè)字符,A - Z,a - z,0 - 9,+ ,/ , 對(duì)應(yīng)索引為 0 - 63。

  • base64編碼時(shí)選取3個(gè)字節(jié)為一組,進(jìn)行重新編排,將原來8個(gè)bit為一個(gè)字節(jié)改為每6個(gè)bit作為新的字節(jié),3個(gè)字節(jié)編碼形成4個(gè)字節(jié);
  • 如果字符字節(jié)長度不是3的倍數(shù),會(huì)使用\x00字節(jié)補(bǔ)足,再根據(jù)補(bǔ)足的數(shù)量添加等量的=標(biāo)識(shí);
  • 如43yW56CB5rWL6K+HUQ==代表,編碼時(shí)補(bǔ)足兩個(gè)\x00,編碼后增加兩個(gè)+;

2. Base64編碼使用

如果需要將包含中文的utf-8編碼字符轉(zhuǎn)換稱ASCII碼,則需要使用Base64作為中間編碼來保證字符數(shù)據(jù)的穩(wěn)定。

  • 編碼,要將utl-8字符使用base64編碼,得到結(jié)果后將字符轉(zhuǎn)成ASCII編碼;
  • 解碼,將ASCII編碼解析為Base64字符串,使用Base64解碼方法解析為utf-8的結(jié)果數(shù)據(jù);
  • 除了針對(duì)字符串外,Base64還可以對(duì)不太大的文件進(jìn)行編碼,使用字符序列表示二進(jìn)制文件;

3. JavaScript 原生提供兩個(gè) Base64 相關(guān)的方法

  • btoa():任意值轉(zhuǎn)為 Base64 編碼;
  • atob():Base64 編碼轉(zhuǎn)為原來的值;

注意,這兩個(gè)方法不適合非 ASCII 碼的字符,會(huì)報(bào)錯(cuò)。
要將非 ASCII 碼字符轉(zhuǎn)為 Base64 編碼,必須中間插入一個(gè)轉(zhuǎn)碼環(huán)節(jié),再使用這兩個(gè)方法。

function b64Encode(str) {
  return btoa(encodeURIComponent(str));
}

function b64Decode(str) {
  return decodeURIComponent(atob(str));
}

b64Encode('你好') // "JUU0JUJEJUEwJUU1JUE1JUJE"
b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE') // "你好"

總結(jié)

參考鏈接:
URL編碼和Base64編碼
Web開發(fā)須知:URL編碼與解碼
escape,encodeURI,encodeURIComponent有什么區(qū)別?文章來源地址http://www.zghlxwxcb.cn/news/detail-787880.html

到了這里,關(guān)于URL編碼和Base64編碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • js實(shí)現(xiàn)base64,url,blob之間的相互轉(zhuǎn)換

    js實(shí)現(xiàn)base64,url,blob之間的相互轉(zhuǎn)換

    一般來說前端展示圖片會(huì)通過三種方式: url、base64、blob 1.url: 一般來說,圖片的顯示還是建議使用url的方式比較好。 2.base64: 如果圖片較大,圖片的色彩層次比較豐富,則不適合使用這種方式,因?yàn)槠銪ase64編碼后的字符串非常大,會(huì)明顯增大HTML頁面,影響加載速度。如果圖

    2023年04月27日
    瀏覽(27)
  • js實(shí)現(xiàn)base64、url和blob之間相互轉(zhuǎn)換的三種方式

    js實(shí)現(xiàn)base64、url和blob之間相互轉(zhuǎn)換的三種方式

    Blob對(duì)象表示一個(gè)不可變、原始數(shù)據(jù)的類文件對(duì)象,Blob表示的不一定是JavaScript原生格式的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于js實(shí)現(xiàn)base64、url和blob之間相互轉(zhuǎn)換的三種方式 url 轉(zhuǎn) base64 Blob 轉(zhuǎn) url Blob 轉(zhuǎn) base64 base64 轉(zhuǎn)Blob base64 轉(zhuǎn) url 一般來說前端展示圖片會(huì)通過三種方式:

    2024年02月03日
    瀏覽(30)
  • 前端實(shí)現(xiàn)base64編碼處理

    文件上傳時(shí),因?yàn)閎ase64文件字符串過長后端接收失敗的問題。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 Base64是一種用于將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為ASCII字符集中可打印字符的編碼方法。它通常用于在不同系統(tǒng)之間傳輸二進(jìn)制數(shù)據(jù),因?yàn)樵S多系統(tǒng)只支持文本數(shù)據(jù)的傳輸。 代

    2024年02月12日
    瀏覽(39)
  • [譯]JavaScript中Base64編碼字符串的細(xì)節(jié)

    [譯]JavaScript中Base64編碼字符串的細(xì)節(jié)

    本文作者為 360 奇舞團(tuán)前端開發(fā)工程師 本文為翻譯 原文標(biāo)題:The nuances of base64 encoding strings in JavaScript 原文作者:Matt Joseph 原文鏈接:https://web.dev/articles/base64-encoding ? Base64編碼和解碼是一種常見的將二進(jìn)制內(nèi)容轉(zhuǎn)換為適合Web的文本的形式。它通常用于data URLs,比如內(nèi)嵌圖片

    2024年02月05日
    瀏覽(28)
  • 前端打包部署后接口BASE_URL不對(duì)問題解決辦法

    前端打包部署后接口BASE_URL不對(duì)問題解決辦法

    在前端打包部署時(shí),為了免去不同環(huán)境打包的麻煩,項(xiàng)目用的流水線觸發(fā)方式。在這里不細(xì)說,重點(diǎn)說說下面情況。 當(dāng)項(xiàng)目提交打包部署后,訪問壓測(cè)環(huán)境或者生產(chǎn)環(huán)境的地址來使用項(xiàng)目時(shí),發(fā)現(xiàn)接口報(bào)錯(cuò)404。 ?在NETWORK里發(fā)現(xiàn)接口的BASEURL和當(dāng)前環(huán)境需要調(diào)用的后端baseurl不同

    2024年02月11日
    瀏覽(24)
  • 前端Base64 編碼和解碼的使用方法

    使用 Base64 類從 ‘js-base64’ 庫進(jìn)行 Base64 編碼和解碼 vue: 使用 npm 或 yarn 包管理器來安裝‘js-base64’ 庫 原生: 通過 vue: 導(dǎo)入 Base64 類: 或者: vue: Base64 編碼的使用示例: Base64 解碼的使用示例: 或者,導(dǎo)入 encode 和 decode 函數(shù): Base64 編碼的使用示例: Base64 解碼的使用示例

    2024年02月07日
    瀏覽(26)
  • 后臺(tái)傳輸圖片給前端的Base64編碼方法及原理解析

    后臺(tái)傳輸圖片給前端的Base64編碼方法及原理解析

    探索后臺(tái)向前端傳輸圖片的方式之一:通過Base64編碼將圖片轉(zhuǎn)換為字符串?dāng)?shù)據(jù),并在前端顯示圖片。本文詳細(xì)介紹了Base64編碼的原理、轉(zhuǎn)換步驟以及位數(shù)不足情況的處理方法,幫助理解Base64編碼的工作原理。

    2024年02月04日
    瀏覽(42)
  • python標(biāo)準(zhǔn)模塊介紹 -Base64: Base64, Base85等數(shù)據(jù)編碼

    功能:RFC 3548: Base16, Base32, Base64 數(shù)據(jù)編碼。轉(zhuǎn)換二進(jìn)制數(shù)據(jù)為適合明文協(xié)議傳輸?shù)?ASCII 序列。轉(zhuǎn)換 8bits 為每個(gè)字節(jié)包含 6,5 或 4bits 的有效數(shù)據(jù),比如 SMTP, URL 的一部分或者 HTTP POST 的一部分。參考: RFC 3548。編碼算法不同于 uuencode。 類型:標(biāo)準(zhǔn)庫 相關(guān)模塊:uu, binhex, uu, quopri Base64

    2024年02月05日
    瀏覽(27)
  • base64編碼:js實(shí)現(xiàn)base64編碼的3種方式,多場(chǎng)景下分析使用

    js實(shí)現(xiàn)base64編碼,前端一般應(yīng)用場(chǎng)景在與后端接口參數(shù)中體現(xiàn),后端可能需要某個(gè)字段是base64編碼的字符,這時(shí)候就需要用前端的方法進(jìn)行轉(zhuǎn)換,再作為參數(shù)傳遞到服務(wù)端。 js實(shí)現(xiàn)base64編碼的3種方式 1. 使用base64.js進(jìn)行轉(zhuǎn)換 獲取base64.js,可以直接搜索base64.js下載。推薦使用n

    2024年02月16日
    瀏覽(18)
  • pytest---環(huán)境切換(base-url)

    pytest---環(huán)境切換(base-url)

    前面小編介紹了如何通過pytest的插件來實(shí)現(xiàn)自動(dòng)化測(cè)試的環(huán)境的切換,當(dāng)時(shí)使用的方法是通過鉤子函數(shù)進(jìn)行獲取命令行參數(shù)值,然后通過提前配置好的參數(shù)進(jìn)行切換測(cè)試環(huán)境地址,今天小編再次介紹一種方法,通過pytest的插件:pytest-base-url進(jìn)行來實(shí)現(xiàn)。 pytest-base-url 是pytest的

    2024年02月15日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包