来自公众号:Gopher指北
URL中不能显示地蕴含空格这曾经是一个共识,而空格以何种模式存在,在不同的规范中又不完全一致,以致于不同的语言也有了不同的实现。
rfc2396%20
+%20
+++20%+
Go罕用的三种URL编码方式
作为Gopher最先关注的天然是Go语言自身的实现,因而咱们首先理解一下Go中罕用的三种URL编码方式的异同。
url.QueryEscape
fmt.Println(url.QueryEscape(" +Gopher指北"))
// 输入:+%2BGopher%E6%8C%87%E5%8C%97
url.QueryEscape++%2B
url.PathEscape
fmt.Println(url.PathEscape(" +Gopher指北"))
// 输入:%20+Gopher%E6%8C%87%E5%8C%97
url.PathEscape20%+
url.Values
var query = url.Values{}
query.Set("hygz", " +Gopher指北")
fmt.Println(query.Encode())
// 输入:hygz=+%2BGopher%E6%8C%87%E5%8C%97
(Values).Encode++%2B(Values).Encodeurl.QueryEscape(Values).Encodeurl.QueryEscape=&
对咱们开发者而言,这三种编码方式到底应该应用哪一种,请持续浏览后文置信你能够在前面的文章中找到答案。
不同语言中的实现+
PHP中的URL编码
urlencode
echo urlencode(' +Gopher指北');
// 输入:+%2BGopher%E6%8C%87%E5%8C%97
rawurlencode
echo rawurlencode(" +Gopher指北");
// 输入:%20%2BGopher%E6%8C%87%E5%8C%97
urlencodeurl.QueryEscaperawurlencode+
JS中的URL编码
encodeURI
encodeURI(' +Gopher指北')
// 输入:%20+Gopher%E6%8C%87%E5%8C%97
encodeURIComponent
encodeURIComponent(' +Gopher指北')
// 输入:%20%2BGopher%E6%8C%87%E5%8C%97
encodeURIurl.PathEscapeencodeURIComponent+
咱们应该怎么做
更举荐应用url.PathEscape函数编码
GoPHPJS +Gopher指北
编码/解码 | url.QueryUnescape | url.PathUnescape | urldecode | rawurldecode | decodeURI | decodeURIComponent |
---|---|---|---|---|---|---|
url.QueryEscape | Y | N | Y | N | N | N |
url.PathEscape | N | Y | N | YY | Y | YY |
urlencode | Y | N | Y | N | N | N |
rawurlencode | Y | YY | Y | Y | N | Y |
encodeURI | N | Y | N | Y | Y | Y |
encodeURIComponent | Y | YY | Y | Y | N | Y |
YYYYYurl.PathEscaperawurldecodedecodeURIComponent
在理论的开发过程中,Gopher肯定会存在须要解码的场景,此时就须要和URL编码方进行沟通以失去适合的形式解码。
对值进行编码
base32A-Z和数字2-7
最初,衷心希望本文可能对各位读者有肯定的帮忙。
PHP 7.3.29go 1.16.6js Chrome94.0.4606.71的Console
参考
- https://www.rfc-editor.org/rf…
- https://www.w3schools.com/tag…