encodeURI和encodeUri有什么区别

时间:2019-01-30 19:27:40

标签: javascript

我想在javascript中对字符串进行url编码

但是这两个函数调用会得到相同的结果:

encodeURI('g0sceq3EkiAQTvyaZ07C+C4SZQz9FaGTV4Zwq4HkAnc=') === decodeURI('g0sceq3EkiAQTvyaZ07C+C4SZQz9FaGTV4Zwq4HkAnc=');  // true

都返回g0sceq3EkiAQTvyaZ07C+C4SZQz9FaGTV4Zwq4HkAnc=

应该不对+=符号进行编码吗?

我认为=%3D,而+%2B

2 个答案:

答案 0 :(得分:2)

使用encodeURIComponentdecodeURIComponent。注意,这两个函数都不是幂等的;如果您不小心对组件进行了双重编码,则必须对其进行双重解码-

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