URL:統(tǒng)一資源定位符
標(biāo)準(zhǔn)格式:
scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]
scheme //有我們很熟悉的http、https、ftp以及著名的ed2k,迅雷的thunder等。
host? //HTTP服務(wù)器的IP地址或者域名
port#? //HTTP服務(wù)器的默認(rèn)端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明,例如tomcat的默認(rèn)端口是8080 http://localhost:8080/
path? //訪問資源的路徑
url-params? //所帶參數(shù)
query-string? ? //發(fā)送給http服務(wù)器的數(shù)據(jù)
anchor //錨點(diǎn)定位
為什么要進(jìn)行URL編碼
1.會引起歧義:比如在URL中我們以鍵值對的格式攜帶參數(shù),每對鍵值對之間用&分隔,加入我們的參數(shù)中本身含有&,那么在解析的時(shí)候顯然會出錯(cuò)
2.非法字符:URL采用的是ASCII編碼,所以非ASCII編碼出現(xiàn)在URL中也會導(dǎo)致解析錯(cuò)誤,例如中文
編碼的幾種方式
escape():這個(gè)方法不同于后兩種方法,它是對字符串進(jìn)行編碼,
此方法現(xiàn)在幾乎被淘汰,此不贅述
encodeURI():這個(gè)方法是真正對URL進(jìn)行編碼的,它著眼于整個(gè)URL進(jìn)行編碼,不會對 ASCII字母 、數(shù)字 、 ~ ! @ # $ & * ( ) = : / , ; ? + ' 進(jìn)行編碼.
例如:
encodeURI("http://www.cnblogs.com/season-huang/some other thing");
//"http://www.cnblogs.com/season-huang/some%20other%20thing";
此處對空格進(jìn)行了編碼,而不會對其他ASCII碼進(jìn)行編碼
對應(yīng)解碼函數(shù):decodeURL()
encodeURIComponent()著眼于對單個(gè)的參數(shù)進(jìn)行編碼,"; / ? : @ & = + $ , #",這些在encodeURI()中不被編碼的符號,在encodeURIComponent()中統(tǒng)統(tǒng)會被編碼
對應(yīng)解碼函數(shù):decodeURLComponent()