首頁 >後端開發 >Golang >為什麼 gourl.ParseQuery 方法的結果如此意外?

為什麼 gourl.ParseQuery 方法的結果如此意外?

PHPz
PHPz轉載
2024-02-10 16:50:071161瀏覽

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

在PHP開發中,gourl.ParseQuery方法被廣泛應用於解析URL查詢字串。然而,有時候我們會發現方法的結果出乎意料,出現了一些令人困惑的情況。為什麼會出現這種意外? php小編百草將在本文中探討這個問題,並提供一些解決方法。讓我們一起來看看吧!

問題內容

該程式的結果是{"x":["1 1 3"], "y":["2", "3"]}。 但為什麼不是 {"x":["1 1 3"], "y":["2", "3"]} 呢? 我需要做什麼才能得到預期的結果"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), ",", ", ")
}

沙盒:https://go.dev/play/p/o0tirtvpaqk

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

解決方法

url.parsequery 替換為

#相關程式碼片段:

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

解決辦法是編碼 (替換為+

像這樣:

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), ",", ", ")
}

以上是為什麼 gourl.ParseQuery 方法的結果如此意外?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除