網址編碼

有些字元 (例如空格) 不能放進網址,另外有些字元在網址內則具有特殊意義。在 HTML 表單中,= 字元可用來區隔名稱和值。URI 一般語法會使用網址編碼來處理這個問題,HTML 表單則會進行額外的替代作業,而非對所有這類字元進行百分比編碼。

舉例來說,字串中的空格不是以 %20 編碼,就是以加號 (+) 取而代之。如果您使用縱線字元 (|) 做為分隔符,請務必將縱線編碼為 %7C。字串中的半形逗號應編碼為 %2C

建議您使用平台的一般網址建構程式庫來自動編碼網址,確保平台網址能正確逸出。

建立有效網址

您可能認為網址是否「有效」一眼就能判斷,但實際情況不然。例如,在瀏覽器的網址列內輸入的網址可能包含特殊字元 (例如 "上海+中國");瀏覽器必須在內部將這些字元轉譯為其他編碼方式才能傳送。同理可證,產生或接受 UTF-8 輸入值的任何程式碼都可能會將含有 UTF-8 字元的網址視為「有效網址」,但也需要先轉譯這些字元,才能向外傳送至網路伺服器。這個過程稱為網址編碼百分比編碼

特殊字元

所有網址都必須符合統一資源 ID (URI) 規格指定的語法,因此我們必須轉譯特殊字元。事實上,這表示網址必須僅包含一個特殊的 ASCII 字元子集:慣用的英數字元符號,以及用做網址內控制字元的部分預留字元。下表摘要列出這些字元:

有效網址字元摘要
字元集字元網址使用情況
英數字元 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 文字字串、結構用途 (http)、通訊埠 (8080) 等。
非預留 - _ . ~ 文字字串
預留 ! * ' ( ) ; : @ & = + $ , / ? % # [ ] 控制字元和/或文字字串

建立有效網址時,您必須確認網址僅包含「有效網址字元摘要」表格中列出的字元。如果網址使用上述字元集,通常會導致兩個問題:一個是遺漏問題,一個則是代換問題:

  • 您希望處理的字元不屬於上述字元集。舉例來說,外國語言的字元 (例如「上海+中國」) 就需要使用上述字元加以編碼。依照普遍慣例,空格 (網址內不允許使用) 通常也用加號 '+' 字元來表示。
  • 在上述字元集中以預留字元形式列出的字元,但需依照字面意思使用。舉例來說,網址內會使用 ? 來表示查詢字串的開頭;如果您想使用「? and the Mysterions」這個字串,就必須對 '?' 字元進行編碼。

遵守網址編碼原則的所有字元,都會使用 '%' 字元,以及對應至相關 UTF-8 字元的雙字元十六進位值進行編碼。舉例來說,採用 UTF-8 編碼的「上海+中國」改用網址編碼時,會成為 %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B。字串「? and the Mysterians」進行網址編碼後,會成為 %3F+and+the+Mysterians%3F%20and%20the%20Mysterians

需要編碼的常見字元

必須編碼的部分常見字元如下:

不安全的字元 經過編碼的值
空格 %20
" %22
< %3C
> %3E
# %23
% %25
| %7C

轉換您從使用者輸入內容中取得的網址,有時並不容易處理。舉例來說,使用者輸入的地址可能是「5th&Main St.」。一般來說,您應該根據各組成部分來建立網址,並將任何使用者輸入內容當成常值字元來處理。

此外,所有 Google 地圖平台網路服務和 Static Web API 的網址長度上限都是 8,192 個字元。對於大部分的服務而言,很少出現接近此字元限制的情況。但請注意,某些服務的幾個參數可能會產生較長的網址。