猿问

go URL 中的额外转义字符

我有以下代码片段:


    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 版


呼唤远方
浏览 415回答 1
1回答

红糖糍粑

URL 可能仅包含 ASCII 字符集的字符,但通常旨在包含/传输此 ASCII 集之外的字符。在这种情况下,必须将 URL 转换为有效的 ASCII 格式。如果原始URL 包含允许集之外的字符,它们将被转义:它们被替换为'%'后跟两个十六进制数字。因此该字符'%'是特殊的,也必须进行转义(其转义形式也将以 开头'%',其十六进制代码为25)。由于您的原始URL 包含字符'%',它将被替换为"%25"。回到你的例子:在你看到的打印表格中"%2525"。你可能会问为什么不只是"%25"?这是因为您的原始 url 包含转义形式的a '%',这意味着其原始形式包含转义序列。如果您将其用作/解释为原始输入,则将替换为which 后跟来自输入的 ,从而导致."%25"'%'"%25""25""%2525"
随时随地看视频慕课网APP

相关分类

Go
我要回答