js编码函数escape(),encodeURI(),encodeURIComponent()简介

2019-05-311486次阅读javascript

因为网络标准RFC 1738做了硬性规定:只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。

这意味着,如果URL中有汉字,就必须escape(),encodeURI(),encodeURIComponent()编码后使用。

Get或Post方法发出HTTP请求中包含中文,此时的编码方法是由网页HTML源码中的字符集决定的。

<meta charset="UTF-8">

以“春节”为例:如果是GB2312编码,生成的是%B4%BA%BD%DA。如果是UTF-8编码,生成的是%E6%98%A5%E8%8A%82。

Ajax中的URL包含中文,在这种情况下,IE和Firefox的处理方式完全不一样。IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。

escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如"春节"的返回结果是%u6625%u8282,,escape()不对"+"编码,主要用于汉字编码,现在已经不提倡使用。

encodeURI()是Javascript中真正用来对URL编码的函数。 编码整个url地址,但对特殊含义的符号"; / ? : @ & = + $ , #"也不进行编码。对应的解码函数是:decodeURI()

encodeURIComponent() 能编码"; / ? : @ & = + $ , #"这些特殊字符。对应的解码函数是decodeURIComponent()假如要传递带&符号的网址,所以用encodeURIComponent()。

上一篇: 百分比实现图片、视频、元素宽高等比缩放  下一篇: css中@supports特性检测  

js编码函数escape(),encodeURI(),encodeURIComponent()简介相关文章