Calvert's murmur

Golang 的網址編碼和解碼

2021-09-15

約 1709 字 / 需 9 分鐘閱讀

原文:CalliCoderGolang URL Encoding and Decoding

網址只能包含 US-ASCII 字元集中的有限字元。這些字元包括數字(0-9)、字母(A-Za-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?&
Tags: Golang