【问题标题】:URL Escaping producing "%A(MISSING)" instead of "%3A"URL 转义产生“%A(MISSING)”而不是“%3A”
【发布时间】:2014-08-30 23:05:04
【问题描述】:

我正在使用带有 go 语言的 revel 框架。最近,当我运行以下代码时:

import (
    ...
    "net/url"
    ...
)

revel.INFO.Println(url.QueryEscape("http://hello.com"))

我明白了

INFO  2014/07/09 14:58:34 user.go:39: http%A(MISSING)%F(MISSING)%F(MISSING)hello.com

当我期望得到更像的东西时

INFO  2014/07/09 14:58:34 user.go:39: http%3A%2F%2Fhello.com

为什么%3A 在输出中被%A(MISSING) 替换了,我该如何解决?

我看到的唯一可能产生字符串“(MISSING)”的代码在fmt包中,但通过查看net/url源代码包,我看不出这是怎么回事正在发生。我是否可能以某种方式访问​​了 go 库的旧(和损坏?)版本?我的设置可能还有其他问题吗?

相关:Encode / decode URLs

相关Go源码:http://golang.org/src/pkg/net/url/url.go?s=14330:14361#L553

【问题讨论】:

  • 看来 revel 坏了,正在使用 Printf...
  • 我什至没有想到。哇。我坐在这里重新安装所有东西,感觉很愚蠢。 :-P

标签: url go revel


【解决方案1】:

revel.INFO.Println 类似于fmt.Printf,它需要一个格式字符串和参数。要记录包含 % 字符的字符串,您需要对其进行转义,或者最好将其作为参数传递:

revel.INFO.Println("The escaped URL is: %s", url.QueryEscape("http://hello.com"))

(您可以只使用"%s" 作为格式字符串,但为什么不借此机会提供上下文。)

【讨论】:

  • 是的——听起来更像revel.INFO.Println 就像Printf
  • 对,对不起。我会修复答案。谢谢!
猜你喜欢
  • 2020-05-10
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 2017-01-29
  • 2020-01-15
相关资源
最近更新 更多