escape/encodeURI/encodeURIComponent的区别?
2021-12-10大约7分钟
JavaScirpt里有三个用来转义字符串的函数:escape
、encodeURI
和encodeURIComponent
。记住这几个函数的区别不是那么容易,因此这篇文章来总结一下:
escape
能够把大多数英文标点符号替换成对应的十六进制字符,但是面对UNICODE字符的时候,就不是那么够用了,这时候要考虑用encodeURI
。encodeURIComponent
是encodeURI
的一个扩展,区别是前者还会对这些符号进行转义:,
/
?
:
@
&
=
+
$
。当URL里的参数有特殊字符或者包含中文等非ASCII字符的时候,就需要用encodeURIComponent
来做encode。- 每个函数都有对应的反转义的函数,用来做相反的事情。
这是具体的转义的字符表:
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 |