Go语言URL编码方案

tech2022-08-14  129

Photo By: https://picjumbo.com/author/viktorhanacek/


URL编码也称为 Percent encode(%),将不可打印、保留或非ASCII字符的字符串转换为可以在Internet上传输的通用格式。

下面是几种Go语言实现的URL编码方案

URL编码查询字符串

Go的net/url程序包包含一个内置方法QueryEscape,该方法称为转义/编码字符串,以便可以将其安全地放置在URL查询中。以下示例演示了如何在Golang中编码查询字符串

package main import { "fmt" "net/url" } func main() { query := "Hello 中国" fmt.Println(url.QueryEscape(query)) }

输出

Hello+%E4%B8%AD%E5%9B%BD

URL编码多个查询参数

如果要一次编码多个查询参数,则可以创建一个url.Values由Query param到value映射组成的结构,并使用该url.Values.Encode()方法对所有查询param进行编码。下面的示例演示

package main import ( "fmt" "net/url" ) func main() { params := url.Values{} params.Add("name", "中国") params.Add("phone", "+8613000000000") fmt.Println(params.Encode()) }

输出

fmt.Println(params.Encode())

URL编码路径段

就像一样QueryEscape,net/urlGo中的程序包还具有另一个PathEscape()用于编码字符串的函数,以便可以将其安全地放置在URL的路径段中,此方法会把空格编码为%20

package main import ( "fmt" "net/url" ) func main() { path := "Hello 中国+" fmt.Println(url.PathEscape(path)) }

输出

Hello%20%E4%B8%AD%E5%9B%BD+

通过编码各个部分来构建完整的URL

可以通过对URL的不同部分进行不同方式的编码构建完整的URL,下面是一个完整的实例

package main import ( "fmt" "net/url" ) func main() { baseUrl, err := url.Parse("http://www.test.com") if err != nil { fmt.Println("Malformed URL: ", err.Error()) return } // add Path Segment baseUrl.Path = "subpath? reversed character" // prepare query parameters params := url.Values{} params.Add("q", "中国") params.Add("u", "+86-13000000000") // add Query Parameters to the URL baseUrl.RawQuery = params.Encode() fmt.Printf("Encode URL is %q\n", baseUrl.String()) }
最新回复(0)