• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

url - Go URL中的多余转义字符

[复制链接]
菜鸟教程小白 发表于 2022-8-16 02:59:18 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有以下代码片段:

    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包似乎在%符号附近添加了一个额外的转义字符。例如上面的print语句的输出如下:
2015/03/25 12:02:49  url http://localhost:9000/pools/default/buckets/test%2525?bucket_uuid=7864b0dcdf0a578bd0012c70aef58aca

这似乎仅在设置URL的RawQuery字段时发生。知道为什么会这样吗?我正在使用1.3.3版

干杯,
马尼克



Best Answer-推荐答案


URL只能包含ASCII字符集的字符,但通常旨在包含/传输此ASCII字符集之外的字符。在这种情况下,必须将URL转换为有效的ASCII格式。

如果原始URL包含的字符超出了允许的范围,则会对其进行转义:将它们替换为'%',后跟两个十六进制数字。因此,字符'%'是特殊字符,还必须进行转义(其转义形式也将以'%'开头,其十六进制代码为25)。

由于您的原始URL包含字符'%',因此它将被"%25"代替。

回到您的示例:在打印的表单中,您看到"%2525"。您可能会问为什么不只是"%25"

这是因为您的原始网址包含转义形式的'%',这意味着其原始格式包含转义序列"%25"。如果您将其用作原始输入/解释,则'%'将替换为"%25",其后将跟着输入中的"25",从而生成"%2525"

另请:HTML URL Encoding Reference

另外:RFC 1738 - Uniform Resource Locators (URL)

并且:RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax

关于url - Go URL中的多余转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29249900/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap