为什么 gourl.ParseQuery 方法的结果如此意外?
短信预约 -IT技能 免费直播动态提醒
在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 方法的结果如此意外?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341