如何在Go Echo中防止"+"符号被转义?
问题解答
不能直接通过c.QueryParam()实现保留查询参数中+符号的需求。原因是HTTP标准定义查询参数里的+为空格的转义符,Echo框架的c.QueryParam()底层依赖Go标准库的url.ParseQuery,会自动遵循这个规范将+转换为空格。
要保留+符号,可以通过以下两种方式处理:
方案1:手动解析原始查询字符串
直接获取请求的原始查询串,自行处理键值对,避免默认的+转空格逻辑:
import ( "net/url" "strings" ) // 在Echo的handler中使用 rawQuery := c.Request().URL.RawQuery paramMap := make(map[string]string) for _, kvPair := range strings.Split(rawQuery, "&") { kvParts := strings.SplitN(kvPair, "=", 2) if len(kvParts) != 2 { continue } // 解码参数名 key, _ := url.QueryUnescape(kvParts[0]) // 先将原始的+替换为%2B,再解码以保留+ processedValue := strings.ReplaceAll(kvParts[1], "+", "%2B") value, _ := url.QueryUnescape(processedValue) paramMap[key] = value } // 获取目标参数 fmt.Println(paramMap["param"]) // 输出 test+test
方案2:要求请求方规范编码+
按照URL编码规范,+的正确编码形式是%2B。如果请求方将参数值test+test编码为test%2Btest,直接使用c.QueryParam("param")就能得到test+test的结果,这也是最符合HTTP标准的做法。
内容的提问来源于stack exchange,提问作者Arun Code
相关产品推荐
相关产品推荐

