
正文
go语言的url路径编码 golang urlencode
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
url如何编码解码?为什么要编码?
一般来说go语言的url路径编码,URL只能使用英文字母、阿拉伯数字和某些标点符号go语言的url路径编码,不能使用其他文字和符号go语言的url路径编码,这是因为网络标准 RFC 1738 做了硬性规定。如果URL中有汉字,就必须编码后使用。但是麻烦的是,RFC 1738没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定,这导致"URL编码"成为了一个混乱的领域。
四种导致混乱的情况go语言的url路径编码:
网址路径中包含汉字
查询字符串包含汉字
Get方法生成的URL包含汉字
Ajax调用的URL包含汉字(在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。)
综上所述,这个时候需要一种编码方法向服务器发送请求,而js则可以满足这一需求。
decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent() (一般使用encodeURI()和encodeURIComponent())
encodeURI()是Javascript中真正用来对URL编码的函数。它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ = + $ , #",也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。
它对应的解码函数是decodeURI()
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。因此,"; / ? : @ = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。
它对应的解码函数是decodeURIComponent()。
encodeURIComponent比encodeURI编码的范围更大。
举例来说,encodeURIComponent会把 http:// 编码成 http%3A%2F%2F 而encodeURI却不会。
如果go语言的url路径编码你需要编码整个URL,然后需要使用这个URL,那么用encodeURI,否则使用encodeURIComponent。
相关问答
Q1: URL中的空格、加号究竟应该使用何种方式编码
URL中不能显示地包含空格这已经是一个共识go语言的url路径编码,而空格以何种形式存在,在不同的标准中又不完全一致,以致于不同的语言也有了不同的实现。
rfc2396 中明确表示空格应该被编码为 %20 。
而W3C的标准中却又说空格可以被替换为 + 或者 %20 。
老许当场懵逼,空格被替换为 + ,那 + 本身只能被编码。既然如此,为什么不直接对空格进行编码呢。当然这只是老许心中的疑惑,以前的背景go语言的url路径编码我们已经无法追溯,已成的事实我们也无法改变。但,空格到底是被替换为 + 还是 20% , + 是否需要被编码都是现在的我们需要直面的问题。
作为Gopher最先关注的自然是Go语言本身的实现,因此我们首先了解一下Go中常用的三种URL编码方式的异同。
使用 url.QueryEscape 编码时,空格被编码为 + ,而 + 本身被编码为 %2B 。
使用 url.PathEscape 编码时,空格被编码为 20% , 而 + 则未被编码。
使用 (Values).Encode 方法编码时,空格被编码为 + ,而 + 本身被编码为 %2B ,进一步查看 (Values).Encode 方法的源码知其内部仍旧调用 url.QueryEscape 函数。而 (Values).Encode 方法和 url.QueryEscape 的区别在于前者仅编码query中的key和value,后者会对 = 、 均进行编码。
对我们开发者而言,这三种编码方式到底应该使用哪一种,请继续阅读后文相信你可以在后面的文章中找到答案。
既然空格和 + 在Go中的URL编码方式有不同的实现,那在其go语言的url路径编码他语言中是否也存在这样的情况呢,下面以PHP和JS为例。
urlencode
rawurlencode
PHP的 urlencode 和Go的 url.QueryEscape 函数效果一致,而 rawurlencode 则将空格和 + 均进行编码。
encodeURI
encodeURIComponent
JS的 encodeURI 和Go的 url.PathEscape 函数效果一致,而 encodeURIComponent 则将空格和 + 均进行编码。
在前文中已经总结了 Go 、 PHP 和 JS 对 +Gopher指北 的编码操作,下面总结一下其对应的解码操作是否可行的二维表。
上表中的 YY 和 Y 同含义,老许仅以 YY 表示在Go中推荐使用 url.PathEscape 进行编码,同时在PHP和JS中分别推荐使用 rawurldecode 和 decodeURIComponent 进行解码。
在实际的开发过程中,Gopher一定会存在需要解码的场景,此时就需要和URL编码方进行沟通以得到合适的方式解码。
那有没有通用的不需要URL编解码的方式呢go语言的url路径编码?毫无疑问是有的go语言的url路径编码!以 base32 编码为例,其编码字符集为 A-Z和数字2-7 ,此时对值进行base32编码后就无需url编码了。
最后,衷心希望本文能够对各位读者有一定的帮助。
参考
Q2: 什么是URL编码和URL解码
因为在程序中无法直接请求一个含有中文go语言的url路径编码的urlgo语言的url路径编码,所以,go语言的url路径编码我们要对它编码,我们一般会编成gbk,utf-8,但是URL编码和gbk,utf-8编码的区别是,它不会把所有字符都编码,
它只对非字母数字的字符借助utf-8或gbk来编码。
编码时注意 不能把整个url路径传到UrlEncoder的decode方法中,因为它也会把反斜杠/和冒号:也编码,所以域名部分是不需要编码的,取出路径部分 /图片/华仔.jpg
关于go语言的url路径编码和golang urlencode的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







