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瓦阐,這種情況下端口號(hào)可以省略。如果使用了別的端口篷牌,必須指明睡蟋,例如tomcat的默認(rèn)端口是8080 http://localhost:8080/
path //訪問(wèn)資源的路徑
url-params //所帶參數(shù)
query-string //發(fā)送給http服務(wù)器的數(shù)據(jù)
anchor //錨點(diǎn)定位
為什么要進(jìn)行URL編碼
一個(gè)東西如果需要編碼,說(shuō)明它自身是不適合傳輸?shù)?br>
具體看一下哪些情況要進(jìn)行URL編碼
1.會(huì)引起歧義:比如在URL中我們以鍵值對(duì)的格式攜帶參數(shù),每對(duì)鍵值對(duì)之間用&
分隔,加入我們的參數(shù)中本身含有&
,那么在解析的時(shí)候顯然會(huì)出錯(cuò)
2.非法字符:URL采用的是ASCII編碼,所以非ASCII編碼出現(xiàn)在URL中也會(huì)導(dǎo)致解析錯(cuò)誤,例如中文
編碼的幾種方式
-
escape()
:這個(gè)方法不同于后兩種方法,它是對(duì)字符串進(jìn)行編碼,
此方法現(xiàn)在幾乎被淘汰,此不贅述 -
encodeURI()
:這個(gè)方法是真正對(duì)URL進(jìn)行編碼的,它著眼于整個(gè)URL進(jìn)行編碼,不會(huì)對(duì) ASCII字母 、數(shù)字 枷颊、 ~ ! @ # $ & * ( ) = : / , ; ? + ' 進(jìn)行編碼.
例如:
encodeURI("http://www.cnblogs.com/season-huang/some other thing");
//"http://www.cnblogs.com/season-huang/some%20other%20thing";
此處對(duì)空格進(jìn)行了編碼,而不會(huì)對(duì)其他ASCII碼進(jìn)行編碼
對(duì)應(yīng)解碼函數(shù):decodeURL()
-
encodeURIComponent()
著眼于對(duì)單個(gè)的參數(shù)進(jìn)行編碼,"; / ? : @ & = + $ , #"戳杀,這些在encodeURI()中不被編碼的符號(hào),在encodeURIComponent()
中統(tǒng)統(tǒng)會(huì)被編碼
對(duì)應(yīng)解碼函數(shù):decodeURLComponent()