在 Go 中编码和解码整个 URL 的推荐方法是什么?我知道方法 url.QueryEscape
和 url.QueryUnescape
,但它们似乎并不是我正在寻找的。具体来说,我正在寻找像 JavaScript 的 encodeURIComponent
和 decodeURIComponent
这样的方法。
原文由 Sergi Mansilla 发布,翻译遵循 CC BY-SA 4.0 许可协议
来自 MDN 上的 encodeURIComponent :
encodeURIComponent 转义除以下字符以外的所有字符:字母、十进制数字、
'-', '_', '.', '!', '~', '*', ''', '(', ')'
从 Go 的 url.QueryEscape 实现(特别是 shouldEscape
私有函数),转义除以下字符之外的所有字符:字母、十进制数字、 '-', '_', '.', '~'
。
与 Javascript 不同,Go 的 QueryEscape() 将 转义 '!', '*', ''', '(', ')'
。基本上,Go 的版本严格遵守 RFC-3986。 Javascript 更宽松。再次来自 MDN:
如果希望更严格地遵守 RFC 3986(保留 !、’、(、) 和 *),即使这些字符没有正式的 URI 定界用途,也可以安全地使用以下字符:
function fixedEncodeURIComponent (str) {
return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}
原文由 mna 发布,翻译遵循 CC BY-SA 3.0 许可协议
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答2.2k 阅读
1 回答2.1k 阅读
您可以使用 net/url 模块进行所有您想要的 URL 编码。它不会为 URL 的各个部分分解单独的编码函数,您必须让它构造整个 URL。在仔细研究了源代码后,我认为它做得非常好并且符合标准。
这是一个例子( 游乐场链接)
哪个打印-