參考文獻
url 由網際網路工程任務組織(ietf)uri 工作小組制定並成為乙個網際網路標準,收錄於 rfc1738。
正如有許多不同的獲取資源的方法一樣,描述這些資源的位置也有多種方案。不同的協議有不同的 url 語法,但是 url 的通用語法為其他協議建立新的方案提供了框架。一般而言,url 的編寫方式如下:
:
url 包含特定的協議名稱
,後面是冒號,然後是字串,該字串的解釋取決於不同協議的具體實現。
internet 有很多應用層的協議可以獲取網路資源,其 url 的格式語法會有所不同。以下是常見的協議。
prospero prospero directory service雖然 url 除協議外的其餘部分的語法可能會因特定協議而有所不同,但涉及直接對 internet 上的指定主機使用基於 ip 的協議的 url,擁有通用的語法:
//:@:/
其中:@
、
、:
和/
都是可選的。url 協議特定部分以雙斜槓 「//」 開頭,表明它符合通用 internet 協議語法。不同的元件遵循以下規則:
注意,使用者名稱和密碼如果存在,後面跟著乙個 @ 字元。在使用者名稱和密碼欄位中,必須對字元: @ /
進行編碼。
http(s) 不允許使用使用者名稱或密碼,乙個合法的 http(s) url 格式如下:
http(s)://:/?#
(1)協議名:http 或 https 協議;
(2):主機名。乙個 url 中,既可以使用網域名稱也可以使用 ip 表示主機位址;
(3):埠。主機名和埠之間使用冒號分隔。埠是可選的,如果省略將採用預設埠,http 預設埠是 80,https 預設埠 443;
(4):資源路徑。資源在網路主機上的路徑,路徑也是可選的,預設訪問預設資源;
(5):查詢引數。格式為 key=value,多個引數使用 & 分隔;引數也是可選的;
(6):片段。從 # 開始到最後,一般用於定位到資源內的乙個片段,比如文件的乙個章節;片段也是可選的。
示例如下:
觀察示例,對照 http url 的格式,我們可以知道:
(1)http 為協議;
(2)www.aspxfans.com 為主機網域名稱;
(3)8080 為埠號;
(4)news/index.asp 為資源路徑;
(5)boardid=5&id=24618&page=1 為查詢引數;
(6)name 為資源內的乙個片段。
通過上面對 http(s) url 格式的分析,我麼可以很清楚地知道 http(s) url 中的特殊字元。
字元特殊含義
十六進製制值
:協議與url 實現部分以及主機名與埠號之間的分隔符
%3a/
分隔目錄和子目錄
%2f&
url 中指定的引數間的分隔符
%26=
url 中指定引數的值
%3d?
分隔實際的 url 和引數
%3f#
表示書籤
%23+
表示空格
%2b%
指定特殊字元
%25當以上字元在不表示其特殊含義時,出現在 http(s) url 中均需要對其編碼。
url 是乙個字串行,由數字、字母和特殊字元組成。對 url 進行編碼主要原因有如下幾點:
因此只有字母和數字[0-9a-za-z]
、具有特殊含義的保留字元以及非保留字元,才可以不經過編碼直接用於 url。
rfc3986 規定了 url 中非保留字元,即無需轉義的沒有任何特殊含義的字元,其定義如下:
unreserved = alpha / digit / "-" / "." / "_" / "~"
alpha 表示 52 大小寫英文本母,digit 表示 10 個數字,後面依次時連字元、點號、下劃線和波浪號。
除了上面非保留字元,其他任何字元出現在 url 的不同部分時,如果與該部分的保留字元發生衝突或不可列印或超出 ascii 表示範圍,均需要對其編碼。
url 的編碼方式也比較簡單,即使用字元 % 後跟兩個十六進製制數字(0123456789abcdef 或 0123456789abcdef)表示字元碼值的單個位元組值。比如:
春節
因為上面的 url 引數部分存在 ascii 無法表示的漢字"春節",因此需要對上面 url 引數部分進行編碼,編碼後的 url 是:
%e6%98%a5%e8%8a%82
其中 0xe698a5 是漢字"春"的 utf8 碼值,0xe88a82 是漢字"節"的 utf8 碼值。
以 go 為例,可以使用 url.queryescape 和 url.queryunescape 實現引數的編碼和解碼。
package main
import (
"net/url"
)func main()
執行輸出:
%e6%98%a5%e8%8a%82
春節
上面只是對 http url 的引數進行了編碼,如果 url 中的路徑部分存在特殊字元,比如 / 或者 ?,也需要對其進行編碼,可以呼叫 go 的 url.pathescape 和 url.pathunescape 來完成編譯碼。
[1] rfc1738
[2] rfc3986
[4] 檢視字元編碼(utf-8)
[5] 關於url編碼標準的說明
URL編碼 解碼
url編碼 通過頁面傳輸資料給伺服器時,如果包含了一些特殊字元是無法傳送的。這時就需要先把要傳送的資料轉換成url編碼格式,再傳送給伺服器。伺服器會自動識別出資料是使用url編碼過的,然後會自動把資料轉換回來 url編碼 解碼的4個方法 encodeurl encodeurlcomponent de...
URL 字元編碼
url 編碼會將字元轉換為可通過網際網路傳輸的格式。web 瀏覽器通過 url 從 web 伺服器請求頁面。url 是網頁的位址,比如 url 只能使用 ascii 字符集來通過網際網路進行傳送。由於 url 常常會包含 ascii 集合之外的字元,url 必須轉換為有效的 ascii 格式。url...
關於URL編碼
1.encodecomponent編碼url,url不能直接使用,需要編碼 var rlt var url var params for var i in params for var i in params console.log rlt 1.url就是 只要上網,就一定會用到.只有字母和數字 0...