在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中文网其他相关文章!