前言
escape、encodeURI、encodeURIComponent这三个js函数经常被用到,但不是特别清楚他们之间的区别
escape
escape() 函数可对字符串进行编码,如果在ASCII码表中返回ascii值,如果中文返回的是unicode编码。
需要说明的是:该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换
encodeURI 和 encodeURIComponent
两者是对URL编码的方法,但是两者的编码范围不同:
- encodeURI方法不会对下列字符编码:
ASCII字母、数字、~!@#$&*()=:/,;?+'
- encodeURIComponent方法不会对下列字符编码:
ASCII字母、数字、~!*()'
所以encodeURIComponent比encodeURI编码的范围更大。
使用场景
1、尽量不用于escape,由于它历史悠久 ,可能达不到要求
2、URL中的参数用encodeURIComponent进行编码,如果含有#、+、=、/
等特殊符号时,encodeURI是无效的。
3、对URL进行编码,建议用encodeURI,因为encodeURIComponent会把//
进行编码。
参考文章
简单明了区分escape、encodeURI和encodeURIComponent
url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介
url参数中有+、空格、=、%、&、#等特殊符号的处理