私が次の文字列を持っているとしましょう
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
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...]]
最初に、 net/url/QueryUnescape
を使用してURLをデコードできます。
'+
'を ''(スペース)に変換します。
次に、デコードされた文字列の分割を開始するか、 net/url/#ParseRequestURI
を使用して URL.Query
を取得できます。