如何在golang中将字符串解析为url.Values?

How to parse string into url.Values in golang?

假设我有以下字符串

honeypot=&name=Zelalem+Mekonen&email=zola%40programmer.net&message=Hello+And+this+is+a+test+message...

我想将它转换成 url.Values 结构,我有以下

data := url.Values{}

parameters := strings.Split(request.Body, "&")

for _, parameter := range parameters {

    parts := strings.Split(parameter, "=")

    data.Add(parts[0], parts[1])

}

确实将其转换为 url.Values,但问题是它不会将 url 编码值(如 + 转换为 space,因此首先 有没有更好的方法来解析这个?然后如果没有我如何首先将url编码字符串转换为普通字符串?

感谢您的帮助...o

您可以先将 URL 解码为 net/url/QueryUnescape
它确实将“+”转换为“</code>”(space)。</p> <p>然后就可以开始拆分解码后的字符串了,或者使用<a href="https://golang.org/pkg/net/url/#ParseRequestURI" rel="nofollow noreferrer"><code>net/url/#ParseRequestURI and get the URL.Query.

您可以使用 url.ParseQuery 将原始查询转换为 url.Values 并取消转义

package main

import (
    "fmt"
    "net/url"
)

func main() {
    t := "honeypot=&name=Zelalem+Mekonen&email=zola%40programmer.net&message=Hello+And+this+is+a+test+message..."
    v, err := url.ParseQuery(t)
    if err != nil {
        panic(err)
    }

    fmt.Println(v)
}

结果:

map[honeypot:[] name:[Zelalem Mekonen] email:[zola@programmer.net] message:[Hello And this is a test message...]]

您也可以使用 URL.Query:

package main

import (
   "fmt"
   "net/url"
)

func main() {
   get := url.URL{
      RawQuery: "honeypot=&name=Zelalem+Mekonen&email=zola%40programmer.net",
   }
   query := get.Query()
   // map[email:[zola@programmer.net] honeypot:[] name:[Zelalem Mekonen]]
   fmt.Println(query)
}

https://golang.org/pkg/net/url#URL.Query