V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xpyusrs
V2EX  ›  Go 编程语言

golang 收到 get 请求后是怎么处理%这样的参数

  •  
  •   xpyusrs · 2022-04-06 17:58:12 +08:00 · 2277 次点击
    这是一个创建于 956 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://127.0.0.1:2020/cs?&b=222&c=%99
    

    请求参数是这样, 收到后在 golang 里面打印出来是

    /cs?a=101&b=222&c=%EF%BF%BD
    

    url 编码也不是很对, %的 url 编码应该是%25, 然后导致解析c的值变成了乱码

    我现在想把%当成普通字符串处理, 我要怎么做, gin 和 beego 都存在这样的问题

    13 条回复    2022-04-06 22:33:40 +08:00
    jxxz
        1
    jxxz  
       2022-04-06 18:06:53 +08:00
    请求的时候%手动编码掉
    http://127.0.0.1:2020/cs?&b=222&c=%2599
    xpyusrs
        2
    xpyusrs  
    OP
       2022-04-06 18:09:50 +08:00
    @jxxz 前端改不了的情况下, 后面能有啥办法解决吗
    jxxz
        3
    jxxz  
       2022-04-06 18:16:12 +08:00
    出现这种问题的原因就是客户端没有做一次编码,导致后端拿到%99 的值被认为是编码后的值
    uelencode 这种数据格式就是要求客户端一次编码 服务端一次解码,改框架不知道怎么改,除非你原生地取出 http 中的 body 自己解析
    janxin
        4
    janxin  
       2022-04-06 18:26:34 +08:00
    标准库的就是这么按照标准处理的,跟框架没什么关系,除非不用标准库实现。

    当然确实可以不用。你如果真的有需求,可以使用 RawQuery 获取原始字符串,自己手工处理一下就好。
    xpyusrs
        5
    xpyusrs  
    OP
       2022-04-06 18:38:48 +08:00
    RawQuery 怎么用才能获取原始字符串, 用的 beego 里面带的是处理后的, 能否贴一部分代码我试一下
    xpyusrs
        6
    xpyusrs  
    OP
       2022-04-06 18:39:23 +08:00
    @janxin RawQuery 怎么用才能获取原始字符串, 用的 beego 里面带的是处理后的, 能否贴一部分代码我试一下
    dcalsky
        7
    dcalsky  
       2022-04-06 18:59:05 +08:00
    gin 里没这个问题啊,你成功浪费了我 5 分钟。encoded query: c=%99
    xpyusrs
        8
    xpyusrs  
    OP
       2022-04-06 19:03:17 +08:00
    @dcalsky 你用什么发的请求啊! 我刚试了, 不行啊
    GeruzoniAnsasu
        9
    GeruzoniAnsasu  
       2022-04-06 19:10:11 +08:00
    我来破案:

    %EF%BF%BD

    U+FFFD 这个字符
    也就是



    喜闻乐见
    GeruzoniAnsasu
        10
    GeruzoniAnsasu  
       2022-04-06 19:12:05 +08:00
    补一张图:

    GeruzoniAnsasu
        11
    GeruzoniAnsasu  
       2022-04-06 19:18:41 +08:00   ❤️ 1
    不够直白,再补一张






    你的 %99 根本就还没出框架就被换成问号了,还搁这 %99 呢
    xpyusrs
        12
    xpyusrs  
    OP
       2022-04-06 20:33:49 +08:00
    @GeruzoniAnsasu 谢谢解惑了, 难怪怎么调都不对
    janxin
        13
    janxin  
       2022-04-06 22:33:40 +08:00
    @xpyusrs ctx.Request.RawQuery
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:45 · PVG 02:45 · LAX 10:45 · JFK 13:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.