Maison > développement back-end > Golang > le corps du texte

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

PHPz
Libérer: 2024-02-10 16:50:07
avant
1129 Les gens l'ont consulté

为什么 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), ",", ", ")
}
Copier après la connexion

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('+')
            }
Copier après la connexion

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), ",", ", ")
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!