我是靠谱客的博主 开朗过客,这篇文章主要介绍Golang urlencode与urldecode编码解码,现在分享给大家,希望可以做个参考。

一、urlencode

golang下可以使用net/url模块实现urlencode和urldecode操作。具体实现的函数为url.QueryEscape和url.QueryUnescape,代码如下:

复制代码
1
2
3
4
5
6
7
8
9
package main import(    "fmt"     "net/url") func main()  {    var urlStr string = "运维之路"     escapeUrl := url.QueryEscape(urlStr)     fmt.Println("编码:",escapeUrl)     enEscapeUrl, _ := url.QueryUnescape(escapeUrl)     fmt.Println("解码:",enEscapeUrl) }


如果涉及到多个参数转码的,这在get和post请求中都有,比如id=100&site=361way.com这样的。可以在通过url.Values进行增加后转码,发下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
package main import ( "fmt" "net/url" ) func main() { params := url.Values{} params.Add("name", "@Rajeev") params.Add("phone", "+919999999999") fmt.Println(params.Encode()) } #输出: name=%40Rajeev&phone=%2B919999999999

同样的,我们通过url的其他函数处理操作过后,一个典型的get请求的URL如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main import ( "fmt" "net/url" ) func main() { // Let's start with a base url baseUrl, err := url.Parse("http://www.mywebsite.com") if err != nil { fmt.Println("Malformed URL: ", err.Error()) return } // Add a Path Segment (Path segment is automatically escaped) baseUrl.Path += "path with?reserved characters" // Prepare Query Parameters params := url.Values{} params.Add("q", "Hello World") params.Add("u", "@rajeev") // Add Query Parameters to the URL baseUrl.RawQuery = params.Encode() // Escape Query Parameters fmt.Printf("Encoded URL is %q ", baseUrl.String()) } #输出结果 Encoded URL is "http://www.mywebsite.com/path%20with%3Freserved%20characters?q=Hello+World&u=%40rajeev"

二、urldecode

简单的url解码,直接使用Unescape就可以了,如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main import ( "fmt" "log" "net/url" ) func main() { encodedValue := "Hell%C3%B6+W%C3%B6rld%40Golang" decodedValue, err := url.QueryUnescape(encodedValue) if err != nil { log.Fatal(err) return } fmt.Println(decodedValue) }

带form 参数,就像上面提到的"param1=value1¶m2=value2"这种格式的可以使用url.ParseQuery()参数解析成map[string][]string格式,如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main import ( "fmt" "log" "net/url" ) func main() { queryStr := "name=Rajeev%20Singh&phone=%2B9199999999&phone=%2B628888888888" params, err := url.ParseQuery(queryStr) if err != nil { log.Fatal(err) return } fmt.Println("Query Params: ") for key, value := range params { fmt.Printf("  %v = %v ", key, value) } } #其输出为: Query Params:   name = [Rajeev Singh]   phone = [+9199999999 +628888888888]


一个get请求类,后面带参数的URL,可以通过如下方式解析并解码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main import ( "fmt" "log" "net/url" ) func main() { u, err := url.Parse("https://www.website.com/person?name=Rajeev%20Singh&phone=%2B919999999999&phone=%2B628888888888") if err != nil { log.Fatal(err) return } fmt.Println("Scheme: ", u.Scheme) fmt.Println("Host: ", u.Host) queries := u.Query() fmt.Println("Query Strings: ") for key, value := range queries { fmt.Printf("  %v = %v ", key, value) } fmt.Println("Path: ", u.Path) } # 输出如下: Scheme:  https Host:  www.website.com Query Strings:   phone = [+919999999999 +628888888888]   name = [Rajeev Singh] Path:  /person


最后

以上就是开朗过客最近收集整理的关于Golang urlencode与urldecode编码解码的全部内容,更多相关Golang内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(532)

评论列表共有 0 条评论

立即
投稿
返回
顶部