Ce face net/url.QueryEscape
În adrese, anumite caractere au rol special (?, &, =, /, #), iar spațiile și diacriticele nu sunt permise direct. Ele se scriu codat: % urmat de valoarea octetului în hexazecimal. url.QueryEscape("cafea & ceai") dă cafea+%26+ceai, potrivit ca valoare după ?q=.
url.PathEscape codează pentru un segment de cale: spațiul devine %20 (nu +) și / devine %2F. url.QueryUnescape face drumul invers și returnează eroare pentru secvențe invalide; pentru căi există url.PathUnescape.
Când lucrezi cu mai mulți parametri, url.Values.Encode codează automat tot; funcțiile acestea sunt pentru o singură valoare.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul de codat sau de decodat. |
Ce returnează
Textul codat; QueryUnescape returnează și o eroare.
Exemple
Exemplul 1: Diferența dintre QueryEscape și PathEscape
package main
import (
"fmt"
"net/url"
)
func main() {
texte := []string{"cafea & ceai", "Iași/Copou", "100% bumbac", "a+b=c?"}
for _, t := range texte {
fmt.Printf("%-14s query: %-22s path: %s\n", t, url.QueryEscape(t), url.PathEscape(t))
}
cautare := "pantofi mărimea 38"
fmt.Println("https://magazin.ro/cauta?q=" + url.QueryEscape(cautare))
fmt.Println("https://magazin.ro/tag/" + url.PathEscape("încălțăminte sport"))
}
Rezultat
cafea & ceai query: cafea+%26+ceai path: cafea%20&%20ceai
Iași/Copou query: Ia%C8%99i%2FCopou path: Ia%C8%99i%2FCopou
100% bumbac query: 100%25+bumbac path: 100%25%20bumbac
a+b=c? query: a%2Bb%3Dc%3F path: a+b=c%3F
https://magazin.ro/cauta?q=pantofi+m%C4%83rimea+38
https://magazin.ro/tag/%C3%AEnc%C4%83l%C8%9B%C4%83minte%20sport
Exemplul 2: Decodare cu QueryUnescape
package main
import (
"fmt"
"net/url"
)
func main() {
for _, codat := range []string{"Ana+Maria", "Ia%C8%99i", "50%25+reducere", "gresit%G1"} {
text, err := url.QueryUnescape(codat)
if err != nil {
fmt.Printf("%-16s eroare: %v\n", codat, err)
continue
}
fmt.Printf("%-16s -> %s\n", codat, text)
}
}
Rezultat
Ana+Maria -> Ana Maria
Ia%C8%99i -> Iași
50%25+reducere -> 50% reducere
gresit%G1 eroare: invalid URL escape "%G1"
Greșeli frecvente
- Folosești
QueryEscapepentru o bucată de cale: spațiile devin+, iar în cale+înseamnă chiar plus. FoloseștePathEscape. - Codezi o valoare de două ori (o dată tu, o dată
url.Values.Encode):%devine%25și serverul primește text stricat.
Comenzi înrudite
net/url.Values: Parametrii unui query string sau ai unui formular: Get, Set, Add, Del, Has și Encode (codare sortată după cheie).net/url.JoinPath: Adaugă segmente la calea unei adrese, cu exact o bară între ele și fără ./ sau ../; varianta metodă lucrează pe *URL.net/url.Parse: Desface o adresă URL în părțile ei (schemă, host, cale, query, fragment); String() o reconstruiește.