原文:CalliCoder — Golang URL Encoding and Decoding
網址只能包含 US-ASCII 字元集中的有限字元。這些字元包括數字(0-9
)、字母(A-Z
、a-z
)和一些特殊字元(-
、.
、_
、~
)。此字元集外的任何字元都需要進行編碼或跳脫,然後才能在網址中使用。
在本文中,你將學到如何對字串進行編碼,以便將其安全的放在網址中。
在 Go 中進行網址編碼或跳脫字串
一個網址由多個部分組成(伺服器位址、路徑、查詢字串等)。通用語法如下所示:
scheme:[//[user:password@]host[:port]]path[?query][#fragment]
Go 提供了以下兩個函數來對字串進行編碼或跳脫,以便將其安全的放在網址中:
- QueryEscape(): 對字串進行編碼,以便安全的放在網址查詢字串中。
- PathEscape(): 對字串進行編碼,以便安全的放在網址路徑中。
讓我們來看個範例:
package main
import (
"fmt"
"net/url"
)
func main() {
// QueryEscape: Escape a string to safely place it inside a URL query string
str := "Gol@ng?&"
encodedStr := url.QueryEscape(str)
fmt.Println(encodedStr)
// PathEscape: Escape a string to safely place it inside a URL path segment
pathVar := "Gol@ng?&"
encodedPathVar := url.PathEscape(pathVar)
fmt.Println(encodedPathVar)
}
# Output
Gol%40ng%3F%26
Gol@ng%3F&
在 Go 中解碼/取消跳脫已編碼的網址
你可以使用 QueryUnescape() 和 PathUnescape() 函數將已編碼的網址解碼回原始形式。以下範例示範了如何使用這些函數:
package main
import (
"fmt"
"net/url"
)
func main() {
// QueryUnescape: Decode a URL query string
encodedStr := "Gol%40ng%3F%26"
decodedStr, err := url.QueryUnescape(encodedStr)
if err != nil {
fmt.Printf("Error decoding the string %v", err)
}
fmt.Println(decodedStr)
// PathUnescape: Decode a URL path segment
encodedPathVar := "Gol@ng%3F&"
decodedPathVar, err := url.PathUnescape(encodedPathVar)
if err != nil {
fmt.Printf("Error decoding the string %v", err)
}
fmt.Println(decodedPathVar)
}
# Output
Gol@ng?&
Gol@ng?&