JavaScript encodeURIComponent()
此方法可以對URI進行編碼,並返回編碼後的字串,與encodeURI方法類似,區別也很明顯。
從方法名稱大致猜測出兩者的主要區別在哪,本文所要介紹的方法針對URI區域性區域編碼。
而encodeURI則是針對整個URI進行編碼,關於兩個方法的更多區別可以參閱如下兩篇文章:
(1).JavaScript encodeURI()一章節。
(2).encodeURI與encodeURIComponent區別一章節。
URI是統一資源定位的意思,是Uniform Resource Identifier的縮寫,下面做幾點說明:
(1).此方法主要針對網址的區域性區域進行編碼。
(2).之前,網址通常被稱作為URL,當前統一稱作URI。
(3).當然URI並不特指網址,還可以包括其他的內容。
關於URI和URL的區別和聯絡可以參閱URI、URL與URN一章節。
本文將結合程式碼例項詳細對encodeURIComponent方法進行一下介紹。
語法結構:
[JavaScript] 純文字檢視 複製程式碼encodeURIComponent(str);
引數解析:
(1).str:將要被編碼的字串,通常是網站的區域性內容。
此方法屬於Global 全域性物件,具體參閱JavaScript Global 物件一章節。
瀏覽器支援:
(1).IE瀏覽器支援此方法。
(2).edge瀏覽器支援此方法。
(3).谷歌瀏覽器支援此方法。
(4).opera瀏覽器支援此方法。
(5).火狐瀏覽器支援此方法。
(6).safria瀏覽器支援此方法。
encodeURIComponent方法使用方式很簡單,只有掌握如下幾點知識才能更好的利用:
(1).此方法主要針對網址哪一部分進行編碼。
(2).為什麼要對網址的指定區域進行編碼。
(3).方法會對哪些字元進行編碼。
(4).編碼返回值的構成。
一.針對網址哪一部分進行編碼:
此方法主要針對網址區域性區域進行編碼,那麼就搞清楚這個區域性區域具體是哪一部分。
以"http://www.softwhy.com?webName=螞蟻部落" ,此方法主要針對網址傳參的部分進行編碼。
也就是說此方法主要為URI的查詢字串部分進行編碼,以免出現一些意想不到的問題,後面會介紹。
看一個程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let encodeStr="http://www.softwhy.com"+encodeURIComponent("?webName=螞蟻部落"); console.log(encodeStr)
程式碼執行效果截圖如下:
可以看到上述程式碼對URI中的查詢字串部分進行了編碼。
這時可能會有朋友會問,為什麼不是用它對整個URI進行編碼,看如下程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let URI="http://www.softwhy.com?webName=螞蟻部落"; let encodeStr=encodeURIComponent(URI); console.log(encodeStr);
程式碼執行效果截圖如下:
如果使用此方法對整個URI進行編碼,可以說這個連結已經廢了,完全不能用。
看看URI的協議部分已經被編碼,如果將這個地址寫入位址列肯定不會開啟想要的頁面。
二.為什麼要對網址的指定區域進行編碼:
不少朋友可能會機械式的應用此方法對URI的查詢字串部分進行編碼,但是並不知道為什麼。
首先說明,並不是所有的查詢字串都需要編碼,但是經過編碼會健壯,因為有些傳遞的查詢引數會產生歧義。
下面通過幾個URI傳參進行一下簡單的分析,首先看一個沒有歧義的:
xxx.com?a=1&b=1,這個URI的傳參不會產生任何問題,再來看下面這個:
www.softwhy.com?q=xxx.com?a=1&b=1,現在我們直接把"xxx.com?a=1&b=1"當做q的值進行傳遞。這時候歧義產生了,由於查詢字串是用&分隔的,所以整個q的值會被分隔,q的值實際上變為"xxx.com?a=1",後面有多了一個b,它的值是1,這在實際專案中問題就大了。
那麼通過encodeURIComponent方法對查詢字串部分進行編碼可以解決此問題。
三.方法會對哪些字元進行編碼:
此方法並不是對所有的字元進行編碼,比如下面這些字元:
(1).字母和數字([0-9a-zA-Z]匹配的字元)
(2).- _ . ! ~ * ' ( )
基本上是一個記憶性的東西,就不再多介紹了。
四.編碼返回值的構成:
關於此方法編碼後返回值的構成本文不做介紹,與、encodeURI方法完全一樣。
具體可以參閱JavaScript encodeURI()一章節。
相關文章
- JavaScript編碼函式escape()、encodeURI()、encodeURIComponent()區別JavaScript函式
- encodeURI VS encodeURIComponent
- encodeURI與encodeURIComponent區別
- encodeURI、encodeURIComponent和escape用法
- escape()、encodeURI()、encodeURIComponent()區別詳解
- 淺析encodeURI,encodeURIComponent,decodeURI,decodeURIComponent
- encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的區別
- 一張圖看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的區別
- escape,encodeURI,encodeURIComponent, URLEncode, RawURLEncode, HTMLEntity, AddSlash, JSON EncodeHTMLJSON
- JavaScript高階:JavaScript物件導向,JavaScript內建物件,JavaScript BOM,JavaScript封裝JavaScript物件封裝
- javaScript系列[06]-javaScript和thisJavaScript
- 【JavaScript學習】JavaScript物件建立JavaScript物件
- 【轉】eval()函式(javascript) - [javaScript]函式JavaScript
- [Javascript] How javascript read the property?JavaScript
- JavaScript -"this"JavaScript
- javascript ??JavaScript
- This in JavaScriptJavaScript
- “This” is For JavaScriptJavaScript
- javascript thisJavaScript
- JavaScriptJavaScript
- javaScript系列[05]-javaScript和JSONJavaScriptJSON
- 44 道 JavaScript 難題(JavaScript Puzzlers!)JavaScript
- 【轉向JavaScript系列】AST in Modern JavaScriptJavaScriptAST
- javascript,還是javascript的問題JavaScript
- JavaScript 教程之JavaScript常用框架簡介JavaScript框架
- 《深入理解JavaScript》——2.3 JavaScript有用嗎JavaScript
- 【JavaScript】--JavaScript總結一覽無餘JavaScript
- 【HTML、JAVASCRIPT、CSS】3、Javascript基本概念HTMLJavaScriptCSS
- [Javascript] Understanding JavaScript Proxies with Symbol.toPrimitiveJavaScriptSymbolMIT
- JavaScript EventJavaScript
- JavaScript BackdoorJavaScript
- JavaScript normalize()JavaScriptORM
- JavaScript setDate()JavaScript
- JavaScript setMinutes()JavaScript
- JavaScript getDate()JavaScript
- JavaScript setHours()JavaScript
- JavaScript setUTCMinutes()JavaScript
- JavaScript setUTCHours()JavaScript