在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('+')
}
解决办法是编码+
(替换为%2b
)
像这样:
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 方法的结果如此意外?的详细内容,更多请关注编程网其它相关文章!