3 回答
TA贡献1812条经验 获得超5个赞
如果你看一下源代码
func (u *URL) Query() Values {
v, _ := ParseQuery(u.RawQuery)
return v
}
调用解析查询,它将在“编码查询组件”模式下调用取消scape作为其所做操作的一部分。
此代码片段是相关的
case '+':
if mode == encodeQueryComponent {
t.WriteByte(' ')
} else {
t.WriteByte('+')
}
这只是符合RFC标准的解析,这是正常的,您看到的行为是预期的
查看 https://cs.opensource.google/go/go/+/refs/tags/go1.16.6:src/net/url/url.go;drc=refs%2Ftags%2Fgo1.16.6;l=182
TA贡献1877条经验 获得超1个赞
查询参数值中的加号实际上是一个 URL 编码的 ASCII 空间。如果要在后端获取,则应在 URL 的查询参数的值中对加号进行百分比编码:。"test+test"test%2Btest
一些最小的服务器代码来修复想法:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", handle)
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
func handle(w http.ResponseWriter, r *http.Request) {
data := r.URL.Query().Get("data")
w.Header().Set("Content-type", "text/plain")
fmt.Fprint(w, data)
}
结果:
http://localhost:8080/?data=test+test打印 ,而test test
http://localhost:8080/?data=test%2Btest指纹。test+test
- 3 回答
- 0 关注
- 103 浏览
添加回答
举报
