Rumah >pembangunan bahagian belakang >Golang >Mengapakah keputusan kaedah gourl.ParseQuery sangat tidak dijangka?

Mengapakah keputusan kaedah gourl.ParseQuery sangat tidak dijangka?

PHPz
PHPzke hadapan
2024-02-10 16:50:071161semak imbas

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

Dalam pembangunan PHP, kaedah gourl.ParseQuery digunakan secara meluas untuk menghuraikan rentetan pertanyaan URL. Namun, kadangkala kita dapati hasil kaedah ini adalah di luar jangkaan dan mengelirukan. Mengapa kemalangan ini berlaku? Editor PHP Baicao akan meneroka masalah ini dalam artikel ini dan menyediakan beberapa penyelesaian. Mari lihat!

Kandungan soalan

Hasil program ini ialah {"x":["1 1 3"], "y":["2", "3"]}. Tetapi mengapa tidak {"x":["1+1+3"], "y":["2", "3"]}? Apakah yang perlu saya lakukan untuk mendapatkan hasil yang diharapkan "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), ",", ", ")
}

Kotak pasir: https://go.dev/play/p/o0tirtvpaqk

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

解决方法

url.parsequery+ 替换为

Solution

url.parsequery Gantikan + dengan +(替换为%2b

Coretan kod berkaitan:

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

Penyelesaian adalah pengekodan🎜)🎜 🎜Seperti ini: 🎜
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), ",", ", ")
}

Atas ialah kandungan terperinci Mengapakah keputusan kaedah gourl.ParseQuery sangat tidak dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam