来自公众号: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…