web-dev-qa-db-ja.com

文字列をgolangのurl.Valuesに解析する方法は?

私が次の文字列を持っているとしましょう

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エンコードされた値をスペースに変換しないことです。したがって、最初にこれを解析するためのより良い方法はありますか?次にそうでない場合は、最初にurlエンコードされた文字列を通常の文字列に変換するにはどうすればよいですか?

あなたの助けをありがとう... o

5
zola

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:[[email protected]] message:[Hello And this is a test message...]]
8
vedhavyas

最初に、 net/url/QueryUnescape を使用してURLをデコードできます。
'+'を ''(スペース)に変換します。

次に、デコードされた文字列の分割を開始するか、 net/url/#ParseRequestURI を使用して URL.Query を取得できます。

1
VonC