escape/encodeURI/encodeURIComponent的区别?

2021-12-10大约7分钟

JavaScirpt里有三个用来转义字符串的函数:escapeencodeURIencodeURIComponent。记住这几个函数的区别不是那么容易,因此这篇文章来总结一下:

  1. escape能够把大多数英文标点符号替换成对应的十六进制字符,但是面对UNICODE字符的时候,就不是那么够用了,这时候要考虑用encodeURI
  2. encodeURIComponentencodeURI的一个扩展,区别是前者还会对这些符号进行转义: , / ? : @ & = + $。当URL里的参数有特殊字符或者包含中文等非ASCII字符的时候,就需要用encodeURIComponent来做encode。
  3. 每个函数都有对应的反转义的函数,用来做相反的事情。

这是具体的转义的字符表:

escape encodeURI encodeURIComponent
20% 20% 20%
! 21% ! !
@ @ @ 40%
# 23% # 23%
$ 24% $ 24%
% 25% 25% 25%
^ %5E %5E %5E
& 26% & 26%
* * * *
( 28% ( (
) 29% ) )
_ _ _ _
= %3D = %3D
+ + + %2B
: %3A : %3A
; %3B ; %3B
. . . .
" 22% 22% 22%
' 27% ' '
\ %5C %5C %5C
/ / / %2F
? %3F ? %3F
< %3C %3C %3C
> %3E %3E %3E
~ %7E ~ ~
[ %5B %5B %5B
] %5D %5D %5D
{ %7B %7B %7B
} %7D %7D %7D
` %60 %60 %60