1、encodeURIComponent
作用
將文本字符串編碼為一個有效的統一資源標識符 (URI)。
Global對象
ECMAScript中的Global對象在某種意義上是作為一個終極的“兜底兒對象”來定義的。換句話說,不屬於任何其他對象的屬性和方法,最終都是它的屬性和方法。
為何要對URI進行編碼:
通常如果一樣東西需要編碼,說明這樣東西並不適合傳輸。原因多種多樣,如Size過大,包含隱私數據。
對於Url來說,之所 以要進行編碼,是因為Url中有些字符會引起歧義。
如Url參數字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號隔,如/s?q=abc&ie=utf- 8。如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務器解析錯誤,因此必須將引起歧義的&和=符號進行轉義, 也就是對其進行編碼。 如:我想把 username 整個當做參數傳遞給 CGI, 而不讓 CGI 將username 分割掉。這話聽不明白的話我換種方式來說,如果 username = 'a&foo=boo' 而不用 encodeURIComponent 的話,整個參數就成了 name=a&foo=boo, 這樣 CGI 就獲得兩個參數 name 和 foo. 這不是我們想要的。
又如,Url的編碼格式采用的是ASCII碼,而不是Unicode,這也就是說你不能在Url中包含任何非ASCII字符,例如中文。否則如果客戶端瀏 覽器和服務端瀏覽器支持的字符集不同的情況下,中文可能會造成問題。
URI編碼
Global對象的encodeURI()和encodeURIComponent()方法
可以對URI (Uniform ResourceIdentifiers,通用資源標識符)進行編碼,以便發送給瀏覽器。有效的URI中不能包含某些字符,例如空格。而這URI編碼方法就可以對URI進行編碼,它們用特殊的UTF-8編碼替換所有無效的字 符,從而讓瀏覽器能夠接受和理解。
2、encodeURI()和encodeURIComponent() 區別
前言:統一資源標識符,或叫做 URI,是用來標識互聯網上的資源(例如,網頁或文件)和怎樣訪問這些資源的傳輸協議(例如,HTTP 或 FTP)的字符串。關於編碼和解碼,目前js常用的就兩套:
1.encodeURI 和 decodeURI
2.encodeURIComponent 和 decodeURIComponent
主要區別:
encodeURI 不會對本身屬於URI的特殊字符進行編碼,例如冒號、正斜杠、問號和井字號;
encodeURIComponent 會對它發現的任何非標准字符進行編碼。
例子:
var url="http://www.baidu.com?name=hjl&age=69&sex=男&province=!@#$%^&*()"
encodeURI: http://www.baidu.com?name=hjl&age=69&sex=%E7%94%B7&province=!@#$%25%5E&*()
encodeURIComponent: http%3A%2F%2Fwww.baidu.com%3Fname%3Dhjl%26age%3D69%26sex%3D%E7%94%B7%26province%3D!%40%23%24%25%5E%26*()
3.為什么encodeURIComponent / encodeURI編碼時要編碼兩次 ?
encodeURI使用的是 UTF-8 編碼規則來編的,當服務器接收url的參數后會自動解碼一次,但自動解碼的字符集不一定是UTF-8,字符集不一致時解碼會出現亂碼。