Maison >développement back-end >Golang >Pourquoi les résultats de la méthode gourl.ParseQuery sont-ils si inattendus ?

Pourquoi les résultats de la méthode gourl.ParseQuery sont-ils si inattendus ?

PHPz
PHPzavant
2024-02-10 16:50:071161parcourir

为什么 gourl.ParseQuery 方法的结果如此意外?

Dans le développement PHP, la méthode gourl.ParseQuery est largement utilisée pour analyser les chaînes de requête d'URL. Cependant, nous constatons parfois que les résultats de cette méthode sont inattendus et déroutants. Pourquoi cet accident se produit-il ? L'éditeur PHP Baicao explorera ce problème dans cet article et proposera quelques solutions. Nous allons jeter un coup d'oeil!

Contenu des questions

Le résultat de ce programme est {"x":["1 1 3"], "y":["2", "3"]}. Mais pourquoi pas {"x":["1+1+3"], "y":["2", "3"]} ? Que dois-je faire pour obtenir les résultats attendus "1+1+3" ?

import (
    "encoding/json"
    "fmt"
    "log"
    "net/url"
    "strings"
)

func main() {
    m, err := url.ParseQuery(`x=1+1+3&y=2&y=3`)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(toJSON(m))
}

func toJSON(m any) string {
    js, err := json.Marshal(m)
    if err != nil {
        log.Fatal(err)
    }
    return strings.ReplaceAll(string(js), ",", ", ")
}

Bac à sable : https://go.dev/play/p/o0tirtvpaqk

{"x":["1+1+3"], "y":["2", "3"]}

解决方法

url.parsequery+ 替换为

Solution

url.parsequery Remplacez + par +(替换为%2b

Extraits de code associés :

case '+':
            if mode == encodequerycomponent {
                t.writebyte(' ')
            } else {
                t.writebyte('+')
            }

La solution est l'encodage🎜)🎜 🎜Comme ça : 🎜
import (
    "encoding/json"
    "fmt"
    "log"
    "net/url"
    "strings"
)

func main() {
    m, err := url.ParseQuery(`x=1%2B1%2B3&y=2&y=3`)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(toJSON(m))
}

func toJSON(m any) string {
    js, err := json.Marshal(m)
    if err != nil {
        log.Fatal(err)
    }
    return strings.ReplaceAll(string(js), ",", ", ")
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer