如何从URL获取参数而不进行转义(golang)

时间:2019-11-18 13:04:19

标签: go

我需要准确地获取用户已传输的内容。但是方法Query()在写入map之前未转义参数:( 示例:

package main

import "net/url"

func main() {
    urlString := "http://www.example.com/?url=https://pt.wikipedia.org/wiki/B%c3%a1rbara_Gordon"
    u, _ := url.Parse(urlString)
    values := u.Query()

    println(values.Get("url"))
    // expected:https://pt.wikipedia.org/wiki/B%c3%a1rbara_Gordon
    // output:  https://pt.wikipedia.org/wiki/Bárbara_Gordon
}

https://play.golang.org/p/4XRTcKKRM2s

1 个答案:

答案 0 :(得分:0)

原始的未经转义的查询可在URL.RawQuery字段中找到:

fmt.Println(u.RawQuery)

这将输出:

url=https://pt.wikipedia.org/wiki/B%c3%a1rbara_Gordon

当然,这只是“ string”,如果只需要一部分,就必须自己解析它,但是几乎不需要。如果您打算将参数值注入另一个URL,只需使用url.URL来构建它即可正确地对其进行转义。