Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to parse string into url.Values in golang?

Let's suppose i have the following string

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

and i want to convert it into url.Values struct and i have the following

data := url.Values{}

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

for _, parameter := range parameters {

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

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

}

which does convert it into url.Values but the problem is that it doesn't convert url encoded values like + into space, so first is there a better way to parse this? then if not how do i convert url encoded string to normal string first?

Thank's For Your Help...o

like image 456
zola Avatar asked Mar 31 '18 04:03

zola


People also ask

How do I URL encode a string in Golang?

URL Encoding or Escaping a String in Go Go provides the following two functions to encode or escape a string so that it can be safely placed inside a URL: QueryEscape(): Encode a string to be safely placed inside a URL query string. PathEscape(): Encode a string to be safely placed inside a URL path segment.

What does URL parse do in Golang?

Go has good support for url parsing. URL contains a scheme, authentication info, host, port, path, query params, and query fragment. we can parse URL and deduce what are the parameter is coming to the server and then process the request accordingly.

What is URL parsing?

URL Parsing. The URL parsing functions focus on splitting a URL string into its components, or on combining URL components into a URL string.


2 Answers

You could use url.ParseQuery to convert the raw query to url.Values with unescaping

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)
}

Result:

map[honeypot:[] name:[Zelalem Mekonen] email:[[email protected]] message:[Hello And this is a test message...]]
like image 194
vedhavyas Avatar answered Sep 30 '22 02:09

vedhavyas


You could first decode the URL with net/url/QueryUnescape.
It does converts '+' into '' (space).

Then you can start splitting the decoded string, or use net/url/#ParseRequestURI and get the URL.Query.

like image 22
VonC Avatar answered Sep 30 '22 03:09

VonC