猿问

查询参数 - 在戈朗中将 + 替换为空白

我正在使用高浪


func (ph *testHandler) GetData() gin.HandlerFunc {

    return func(ctx *gin.Context) {

        params := ctx.Request.URL.Query()

        search = strings.TrimSpace(params.Get("data"))

   } 

}

在这里,我通过了网址中的“测试+测试”,但我得到了“测试测试”


如何在高浪中执行查询解析


心有法竹
浏览 104回答 3
3回答

ABOUTYOU

如果你看一下源代码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

哆啦的时光机

浏览器将 URL 视为空格字符并进行登录,因此在查询参数中将具有值 。为了防止这种情况,您必须在URL中手动添加字符文本的URL编码值 -+%20test+testtest test+https://example.com?data=test%2Btest有关其他 URL 编码值,请参阅 w3 学校。

冉冉说

查询参数值中的加号实际上是一个 URL 编码的 ASCII 空间。如果要在后端获取,则应在 URL 的查询参数的值中对加号进行百分比编码:。"test+test"test%2Btest一些最小的服务器代码来修复想法:package mainimport (    "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 testhttp://localhost:8080/?data=test%2Btest指纹。test+test
随时随地看视频慕课网APP

相关分类

Go
我要回答