㈠什么是URL
統一資源定位系統(uniform resource locator;URL)是因特網的萬維網服務程序上用於指定信息位置的表示方法。
㈡URL編碼
url編碼是一種瀏覽器用來打包表單輸入的格式。
瀏覽器從表單中獲取所有的name和其中的值 ,將它們以name/value參數編碼(移去那些不能傳送的字符,將數據排行等等)作為URL的一部分或者分離地發給服務器。不管哪種情況,在服務器端的表單輸入格式樣子象這樣:theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes
㈢百分號編碼
⑴為什么需要Url編碼?
1)原因:因為Url中有些字符會引起歧義。
2)示例:
①Url參數字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc& ie=utf-8。
②Url的編碼格式采用的是ASCII碼,而不是Unicode,這也就是說你不能在Url中包含任何非ASCII字符,例如中文。否則如果客戶端瀏覽器和服務端瀏覽器支持的字符集不同的情況下,中文可能會造成問題。
⑵哪些字符需要編碼?
RFC3986文檔規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。
1)保留字符
Url可以划分成若干個組件,協議、主機、路徑等。有一些字符(:/?#[]@)是用作分隔不同組件的。例如:冒號用於分隔協議和主機,/用於分隔 主機和路徑,?用於分隔路徑和查詢參數,等等。還有一些字符(!$&'()*+,;=)用於在每個組件中起到分隔作用的,如=用於表示查詢參數中 的鍵值對,&符號用於分隔查詢多個鍵值對。當組件中的普通數據包含這些特殊字符時,需要對其進行編碼。
RFC3986中指定了以下字符為保留字符:

2)不安全字符
還有一些字符,當他們直接放在Url中的時候,可能會引起解析程序的歧義。這些字符被視為不安全字符。

注意:對於Url中的合法字符,編碼和不編碼是等價的,但是對於上面提到的 這些字符,如果不經過編碼,那么它們有可能會造成Url語義的不同。因此對於Url而言,只有普通英文字符和數字,特殊字符$-_.+!*'()還有保留 字符,才能出現在未經編碼的Url之中。其他字符均需要經過編碼之后才能出現在Url中。
⑶如何對Url中的非法字符進行編碼
Url編碼通常也被稱為百分號編碼(Url Encoding,also known as percent-encoding),是因為它的編碼方式非常簡單,使用%百分號加上兩位的字符——0123456789ABCDEF——代表一個字節的 十六進制形式。Url編碼默認使用的字符集是US-ASCII。例如a在US-ASCII碼中對應的字節是0x61,那么Url編碼之后得到的就 是%61,我們在地址欄上輸入http://g.cn/search?q=%61%62%63,實際上就等同於在google上搜索abc了。又如@符號 在ASCII字符集中對應的字節為0x40,經過Url編碼之后得到的是%40。
常見字符的Url編碼列表:

注:1)對於非ASCII字符,需要使用ASCII字符集的超集進行編碼得到相應的字節,然后對每個字節執行百分號編碼。
2)如果某個字節對應着ASCII字符集中的某個非保留字符,則此字節無需使用百分號表示。