How to decode URL-encoded and URL query strings in Go

2 Answers

0 votes
package main

import (
	"fmt"
	"net/url"
)

// decodeQueryString decodes a URL-encoded string.
// It automatically handles percent-encoding (%xx) and '+' to space conversion.
func decodeQueryString(encodedStr string) (string, error) {
	decoded, err := url.QueryUnescape(encodedStr)
	if err != nil {
		return "", err
	}
	return decoded, nil
}

func main() {
	// Example 1: Standard URL encoding with special characters
	sample1 := "Hello%20World%21%20Go%20%26%20Web"
	fmt.Println("--- Example 1: Standard URL Encoding ---")
	fmt.Println("Encoded:", sample1)
	
	decoded1, err := decodeQueryString(sample1)
	if err != nil {
		fmt.Printf("Error decoding: %v\n", err)
	} else {
		fmt.Println("Decoded:", decoded1)
	}

	// Example 2: Form query string encoding (spaces represented as '+')
	sample2 := "Jane+Doe+from+New+York"
	fmt.Println("\n--- Example 2: Form Fragment Encoding ---")
	fmt.Println("Encoded:", sample2)
	
	decoded2, err := decodeQueryString(sample2)
	if err != nil {
		fmt.Printf("Error decoding: %v\n", err)
	} else {
		fmt.Println("Decoded:", decoded2)
	}
}


/*
run:

--- Example 1: Standard URL Encoding ---
Encoded: Hello%20World%21%20Go%20%26%20Web
Decoded: Hello World! Go & Web

--- Example 2: Form Fragment Encoding ---
Encoded: Jane+Doe+from+New+York
Decoded: Jane Doe from New York

*/

 



answered 3 hours ago by avibootz
0 votes
package main

import (
	"fmt"
	"net/url"
)

// parseAndDecodeQuery parses and decodes a complete URL query string into a url.Values map.
func parseAndDecodeQuery(queryString string) (url.Values, error) {
	// url.ParseQuery parses the query string and handles unescaping automatically
	params, err := url.ParseQuery(queryString)
	if err != nil {
		return nil, err
	}
	return params, nil
}

func main() {
	fullQuery := "search=go+tutorial&category=programming&tag=beginner&tag=backend"

	fmt.Println("--- Alternative: Full Query String Parsing ---")
	fmt.Println("Original Query:", fullQuery)

	params, err := parseAndDecodeQuery(fullQuery)
	if err != nil {
		fmt.Printf("Error parsing query: %v\n", err)
		return
	}

	fmt.Println("Decoded Map Result:")
	for key, values := range params {
		fmt.Printf("  %s -> %v\n", key, values)
	}
}


/*
run:

--- Alternative: Full Query String Parsing ---
Original Query: search=go+tutorial&category=programming&tag=beginner&tag=backend
Decoded Map Result:
  category -> [programming]
  tag -> [beginner backend]
  search -> [go tutorial]

*/

 



answered 3 hours ago by avibootz
...