为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
心有法竹 2022-09-12 21:17:19
我正在使用高浪func (ph *testHandler) GetData() gin.HandlerFunc {    return func(ctx *gin.Context) {        params := ctx.Request.URL.Query()        search = strings.TrimSpace(params.Get("data"))   } }在这里,我通过了网址中的“测试+测试”,但我得到了“测试测试”如何在高浪中执行查询解析
查看完整描述

3 回答

?
ABOUTYOU

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


查看完整回答
反对 回复 2022-09-12
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

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

有关其他 URL 编码值,请参阅 w3 学校


查看完整回答
反对 回复 2022-09-12
?
冉冉说

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


查看完整回答
反对 回复 2022-09-12
  • 3 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号