You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:45:30