如何在Go中编码包含空格或特殊字符的URL?

时间:2015-02-16 12:12:35

标签: go

我有一个包含空格和特殊字符的URL,如下例所示:

http://localhost:8182/graphs/graph/tp/gremlin?script=g.addVertex(['id':'0af69422 5be','date':'1968-01-16 00:00:00 +0000 UTC'])

如何在Go中编码这样的网址?

1 个答案:

答案 0 :(得分:3)

net/url包中提供了网址编码。您有以下功能:

url.QueryEscape("g.addVertex(['id':'0af69422 5be','date':'1968-01-16 00:00:00 +0000 UTC'])")

这给了你:

  

g.addVertex%28%5B%27id%27%3A%270af69422 + 5BE%27%2C%27date%27%3A%271968-01-16 + 00%3A00%3A00 +%2B0000 + UTC%27%5D %29

另请查看url.URLurl.Values。根据您的需要,这些将为您解决。

如果您只有整个URL,可以尝试解析它,然后重新编码损坏的查询部分,如下所示:

u, err := url.Parse("http://localhost:8182/graphs/graph/tp/gremlin?script=g.addVertex(['id':'0af69422 5be','date':'1968-01-16 00:00:00 +0000 UTC'])")
if err != nil {
    panic(err)
}   
u.RawQuery = u.Query().Encode()
fmt.Println(u)

但是,要小心。如果字符串包含&ampersands(&)或hashmarks(#),它将不会给出您期望的结果。