我有以下代码片段: u := *baseURL u.User = nil if q := strings.Index(path, "?"); q > 0 { u.Path = path[:q] u.RawQuery = path[q+1:] } else { u.Path = path } log.Printf(" url %v, u.String())我看到当 baseurl 设置为这样的http://localhost:9000/buckets/test%?bucket_uuid=7864b0dcdf0a578bd0012c70aef58aca 时,url 包似乎在 % 符号附近添加了一个额外的转义字符。例如,上述打印语句的输出如下:2015/03/25 12:02:49 url http://localhost:9000/pools/default/buckets/test%2525?bucket_uuid=7864b0dcdf0a578bd0012c70aef58aca这似乎仅在设置 URL 的 RawQuery 字段时发生。知道为什么会这样吗?我使用的是 1.3.3 版
1 回答
红糖糍粑
TA贡献1815条经验 获得超6个赞
URL 可能仅包含 ASCII 字符集的字符,但通常旨在包含/传输此 ASCII 集之外的字符。在这种情况下,必须将 URL 转换为有效的 ASCII 格式。
如果原始URL 包含允许集之外的字符,它们将被转义:它们被替换为'%'
后跟两个十六进制数字。因此该字符'%'
是特殊的,也必须进行转义(其转义形式也将以 开头'%'
,其十六进制代码为25
)。
由于您的原始URL 包含字符'%'
,它将被替换为"%25"
。
回到你的例子:在你看到的打印表格中"%2525"
。你可能会问为什么不只是"%25"
?
这是因为您的原始 url 包含转义形式的a '%'
,这意味着其原始形式包含转义序列。如果您将其用作/解释为原始输入,则将替换为which 后跟来自输入的 ,从而导致."%25"
'%'
"%25"
"25"
"%2525"
- 1 回答
- 0 关注
- 414 浏览
添加回答
举报
0/150
提交
取消