encodeURIComponent 是什么?
今天在看代码的的时候,发现只要是urlquery的值都需要用encodeURIComponent给转义一下,为什么需要转义,encodeURIComponent有什么用?
The
encodeURIComponent()function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two "surrogate" characters).
看了mdn上的解释,单词都看的懂,但是就是不知道在说啥
encodeURIComponent()函数通过将一个,两个,三个或四个表示字符的 UTF-8 编码的转义序列替换某些字符的每个实例来编码 URI(对于由两个“代理”字符组成的字符而言,将仅是四个转义序列)。
再看下中文的,怎么不讲人话,什么鬼意思??
我们直接来试下函数,对“我”进行转义:
E68891就是中文汉字“我”的UTF-8的编码
如果看不懂上面的转换过程,可以去看一下计算机的编码知识,哈哈
所以现在我们懂了,encodeURIComponent 就是把字符先用utf-8表示,然后每个字节之间用%分割开,就得到了我们最后的结果
有什么用?
我们知道url里面有一些字符,比如像 ? & : // 这种,用来区分url里面每一部分表示的信息,而如果我们的queryValue或者queryKey里面有&这个字符,对于url的解析就会出错
举一个例子:juejin.cn?jiamu=hello&er
如果queryValue 是 hello&er 后续对于url的解析就会出错,所以为了避免这种情况发生,就需要对queryKey和queryValue进行encode
encodeURL 和 encodeURLComponent 有什么区别?
encodeURI 是用来处理整个 URI 的,它应该接受 URI 的 protocol, host, port 等部分,只对 path 和 query 进行编码。而 encodeURIComponent 是用来编码你准备用作 query 一部分的字符串的
encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码 ASCII字母 数字 ~!*()'