一文助你分清encodeURI與encodeURIComponent

      網(wǎng)友投稿 797 2022-05-30

      幫助你區(qū)別 encodeURI 與 encodeURIComponent 的使用場景

      背景

      最近在公司做預(yù)覽功能時,遇到對請求參數(shù)進(jìn)行編碼的場景。那么問題來了:

      為什么要對鏈接或參數(shù)進(jìn)行編碼?

      何時需要編碼?

      encodeURI 與 encodeURIComponent 有啥區(qū)別呢?

      下面來一起看看吧~

      為啥需要編碼

      Http 協(xié)議中參數(shù)的傳輸是"key=value"這種鍵值對形式的,如果要傳多個參數(shù)就需要用"&“符號對鍵值對進(jìn)行分割。如”?name1=value1&name2=value2",這樣在服務(wù)端在收到這種字符串的時候,會用"&“分割出每一個參數(shù),然后再用”="來分割出參數(shù)值。

      URL 是采用 ASCII 字符集進(jìn)行編碼的,根據(jù) RFC3986 “%編碼” 規(guī)范:"&“會被編碼為"26”,"=“會被編碼為"3D”。

      如果參數(shù)值中包含"=“或”&"這種特殊字符會產(chǎn)生歧義,因為 URL 編碼只是簡單的在特殊字符的各個字節(jié)前加上%,所以需要對參數(shù)進(jìn)行 URL 編碼。

      如果需要傳輸?shù)膮?shù)可能包含類似"(!$&’()*+,;=)"這種特殊字符時就需要進(jìn)行編碼了。

      下面來看看標(biāo)題所說的兩種編碼方式。

      我們注意到兩種方式都包含一個 URI,那么 URI 是啥?

      統(tǒng)一資源標(biāo)識符(Uniform Resource Identifier,URI)是一個用于標(biāo)識某一互聯(lián)網(wǎng)資源名稱的字符串。

      Web 上可用的每種資源 -HTML 文檔、圖像、視頻片段、程序等 - 由一個通用資源標(biāo)識符(Uniform Resource Identifier, 簡稱"URI")進(jìn)行定位。

      encodeURI

      用作對一個完整的 URI 進(jìn)行編碼,不會對網(wǎng)址中的 ASCII 字母和數(shù)字及標(biāo)點符號進(jìn)行編碼。

      !#$&’()*+,/:;=?@-._~0-9a-zA-Z 不會被編碼

      使用場景:

      當(dāng)需要獲取一個可用的 URL 地址時,使用此方法進(jìn)行編碼。

      例子:

      encodeURI('http://xuedingmiao.com/My first/'); // http://xuedingmiao.com/My%20first/

      encodeURIComponent

      是對統(tǒng)一資源標(biāo)識符(URI)的組成部分進(jìn)行編碼的方法,從字面意思來看 URIComponent 是 URL 組成部分、組件,所以這個方法是對組成部分進(jìn)行編碼而不是整體。

      encodeURIComponent 會假定它的參數(shù)是 URI 的一部分(比如協(xié)議、主機名、路徑或查詢字符串),在 encodeURI 中不被編碼的符號"; / ? : @ & = + $ , #",encodeURIComponent 都會進(jìn)行編碼。

      !’()*-._~0-9a-zA-Z 不會被編碼

      使用場景:

      當(dāng)需要對 URL 的參數(shù)進(jìn)行編碼時,使用 encodeURIComponent。

      例子:

      encodeURIComponent('http://xuedingmiao.com/?a=1&b=2'); // "http%3A%2F%2Fxuedingmiao.com%2F%3Fa%3D1%26b%3D2"

      區(qū)別總結(jié)

      可以看到 encodeURIComponent 編碼的字符范圍比 encodeURI 的大

      參考資料

      encodeURI(https://www.w3school.com.cn/jsref/jsref_encodeuri.asp)

      encodeURIComponent(https://www.w3school.com.cn/js/jsref_encodeURIComponent.asp)

      百分比編碼(https://developer.mozilla.org/zh-CN/docs/Glossary/percent-encoding)

      一文助你分清encodeURI與encodeURIComponent

      TCP/IP

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:談?wù)凱ython的Flask框架學(xué)習(xí)與福利分享
      下一篇:程序員之路:Linux文件搜索
      相關(guān)文章
      亚洲AV午夜成人影院老师机影院| 亚洲人成影院在线高清| 亚洲人成激情在线播放| 国产亚洲av人片在线观看| 亚洲乱码日产精品一二三| 亚洲精品美女久久久久9999| 亚洲视频在线观看网站| 久久精品国产亚洲av麻豆色欲| 久久精品国产69国产精品亚洲| 亚洲妇熟XXXX妇色黄 | 亚洲AV美女一区二区三区| 亚洲成AV人在线播放无码| 亚洲AV永久无码精品水牛影视| 2048亚洲精品国产| 国产偷窥女洗浴在线观看亚洲| 久久亚洲国产精品五月天婷| 亚洲欧洲国产精品香蕉网| 亚洲AV午夜福利精品一区二区| 亚洲三区在线观看无套内射| 亚洲av综合色区| 久久丫精品国产亚洲av| 亚洲国产精品成人精品小说| 最新国产成人亚洲精品影院| 日本亚洲色大成网站www久久| 亚洲日韩精品国产一区二区三区 | 久久夜色精品国产亚洲AV动态图 | 亚洲AV中文无码乱人伦| 亚洲一区二区高清| 国产亚洲成av人片在线观看| 亚洲AV无码专区国产乱码4SE| 国产精品亚洲а∨无码播放| 婷婷久久久亚洲欧洲日产国码AV| 亚洲男人都懂得羞羞网站| 亚洲国产精品张柏芝在线观看| 国产亚洲国产bv网站在线| 色欲色欲天天天www亚洲伊| 激情小说亚洲图片| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲人成伊人成综合网久久久| 亚洲bt加勒比一区二区| 亚洲午夜国产精品|