首頁 > 後端開發 > Golang > 主體

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

PHPz
發布: 2024-02-10 16:50:07
轉載
1131 人瀏覽過

为什么 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!