背景
encodeURIComponent() 函数通过将特定字符的每个实例替换成代表字符的 UTF-8 编码的一个、两个、三个或四个转义序列来编码 URI(只有由两个"代理"字符组成的字符会被编码为四个转义序列)。
与 encodeURI() 相比,此函数会编码更多的字符
JS的encodeURIComponent 转为Go的net/url标准库中提供的QueryEscape
encodeURIComponent
以下字符不会被编码:
字母(A-Z,a-z)和数字(0-9)
特定字符:-、_、.、!、~、*、'、(、)、
这些字符在encodeURIComponent中被视为保留字符,不需要进行编码。
JS
js
console.log(encodeURI('Hello, 世1+2界!'));
输出 Hello%2C%20%E4%B8%96%E7%95%8C!
Go
go
func TestDemo(t *testing.T) {
str := "Hello, 世1+2界!"
encodedStr := url.QueryEscape(str)
// 如果是go解码,则可执行可不执行,返回的结果都是一样的
encodedStr = strings.Replace(encodedStr, "+", "%20", -1)
fmt.Println(encodedStr)
decodedStr, err := url.QueryUnescape(encodedStr)
if err != nil {
fmt.Println("解码失败:", err)
return
}
fmt.Println(decodedStr)
}
输出 Hello%2C%20%E4%B8%961%2B2%E7%95%8C%21
总结
还是有些许差异,如果代码中涉及转换,注意特殊字符是否会用到
对于空格这种,用不到也就不用操这么多心了