我想在javascript中对字符串进行url编码
但是这两个函数调用会得到相同的结果:
encodeURI('g0sceq3EkiAQTvyaZ07C+C4SZQz9FaGTV4Zwq4HkAnc=') === decodeURI('g0sceq3EkiAQTvyaZ07C+C4SZQz9FaGTV4Zwq4HkAnc='); // true
都返回g0sceq3EkiAQTvyaZ07C+C4SZQz9FaGTV4Zwq4HkAnc=
。
应该不对+
和=
符号进行编码吗?
我认为=
是%3D
,而+
是%2B
?
答案 0 :(得分:2)
使用encodeURIComponent
和decodeURIComponent
。注意,这两个函数都不是幂等的;如果您不小心对组件进行了双重编码,则必须对其进行双重解码-
console.log
( encodeURIComponent ("=") // %3D
, decodeURIComponent ("%3D") // =
, encodeURIComponent ("%3D") // %253D
, decodeURIComponent ("%253D") // %3D
, encodeURIComponent (encodeURIComponent ("=")) // %253D
, decodeURIComponent (decodeURIComponent ("%253D")) // =
)
答案 1 :(得分:0)
另一个答案不能回答您的问题。
答案是:您认为+
应该被编码,但这是一个安全的URI字符。参见Safe characters for friendly url
const a = encodeURI("a%")
const b = decodeURI("a")
console.log(a)
console.log(b)
console.log(a === b) /// false