首页  >  文章  >  后端开发  >  为什么 gourl.ParseQuery 方法的结果如此意外?

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

PHPz
PHPz转载
2024-02-10 16:50:071129浏览

为什么 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+ 替换为

解决方法

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

相关代码片段:

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删除