在Go中编码和解码整个URL的推荐方式是什么?我知道url.QueryEscape
和url.QueryUnescape
方法,但它们似乎不是我想要的。具体地说,我正在寻找像JavaScript的encodeURIComponent
和decodeURIComponent
这样的方法。
谢谢。
发布于 2012-12-12 03:14:02
您可以使用net/url模块执行您想要的所有网址编码。它不会为URL的各个部分分解单独的编码函数,您必须让它构建整个URL。在看了一下源代码之后,我认为它做得非常好,符合标准。
下面是一个示例(playground link)
package main
import (
"fmt"
"net/url"
)
func main() {
Url, err := url.Parse("http://www.example.com")
if err != nil {
panic("boom")
}
Url.Path += "/some/path/or/other_with_funny_characters?_or_not/"
parameters := url.Values{}
parameters.Add("hello", "42")
parameters.Add("hello", "54")
parameters.Add("vegetable", "potato")
Url.RawQuery = parameters.Encode()
fmt.Printf("Encoded URL is %q\n", Url.String())
}
哪种打印
Encoded URL is "http://www.example.com/some/path/or/other_with_funny_characters%3F_or_not/?vegetable=potato&hello=42&hello=54"
发布于 2017-04-16 02:18:24
从Go 1.8开始,这种情况已经改变了。我们现在可以访问PathEscape
,除了旧的QueryEscape
来编码路径组件,以及非转义对应的PathUnescape
。
发布于 2015-02-09 18:46:24
为了模仿Javascript的encodeURIComponent()
,我创建了一个字符串助手函数。
示例:将"My String"
转换为"My%20String"
https://github.com/mrap/stringutil/blob/master/urlencode.go
import "net/url"
// UrlEncoded encodes a string like Javascript's encodeURIComponent()
func UrlEncoded(str string) (string, error) {
u, err := url.Parse(str)
if err != nil {
return "", err
}
return u.String(), nil
}
https://stackoverflow.com/questions/13820280
复制相似问题