JS中为什么会存在escape、encodeURI和encodeURIComponent方法

1.为什么需要以上三个方法?

   当我们浏览网页的时候看,会在浏览器的地址栏输入相应的URL地址,然而对于URL中的可以出现的字符是有要求的。

  

   对于URL中的可以出现的字符要求可详见RFC 1738,具体为以下内容:

   Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
   reserved characters used for their reserved purposes may be used
   unencoded within a URL.

   翻译:因此,只有26个英文字母(包含大小写)和10个数字,以及一些特殊字符"$ - _ . + ! * ' ( ) ,",不包含双引号,和一些其他的保留字符可以在URL中不经过编码而直接使用。

 

现在我们开始进入正题,为什么需要以上三个方法呢?

        原因很简单,就是要将那些需要出现在URL中但是不符合URL标准的字符替换为RFC 1738中允许的字符,即转换为合法字符。众所周知,现在的浏览器非常的智能,它会替用户完成很多操作,其中之一就是将URL中的不合法的字符转换为合法字符。

那既然浏览器帮我们做了,为什么还需要这三个方法呢?

        之所以出现此问题是因为并没有规定说URL中的中文必须转化为何种编码,所以有的浏览器会将URL中出现的中文转化为gb2312,有的会转为utf-8。有的是按照浏览器设定的编码,有的是按照其所使用的操作系统的字符编码,由于出现了不确定性,所以当我们需要在后台读取URL中的中文时,可能就会出现编码对应不上,也就无法正确解码得到相应的中文参数。

那怎么消除这种不确定性呢?

         一个比较好的方法是在浏览器对URL编码之前手动的对URL进行编码,手动编码后的URL已经符合RFC 1783规范,也就是编码后的URL中的不合法字符已经被转化了合法字符,这样即使浏览器再自动对URL编码一次,编码后的URL与手动编码后的URL是一样的。这样无论采用gb2312还是utf-8,我们都可以控制(因为是我们自己编的码),只要在后台采用对应的解码方法,即可得到正确的中文参数。

2.escape、encodeURI和encodeURIComponent的具体功能是什么?

   如果想知道javascript中的某些方法的具体功能,建议参见《javascript权威指南》中的相应章节,其描述应该是最清晰、全面和正确的。

3.三个方法的使用情况有哪些?

   如果想知道javascript中的某些方法的具体功能,建议参见《javascript权威指南》中的相应章节,其描述应该是最清晰、全面和正确的。

 

扩展知识:通过1我们知道了为什么会有这三个方法,其根本原因在于RFC1738对URL中可以出现的字符进行了限制,但是为什么要进行这些限制呢?原因是消除潜在的不安全因素,什么叫不安全因素,举个例子,如果允许URL中允许出现空格,则在一些语言处理URL的时候可能会对空格进行忽略,这样便会影响URL的正常解析,即可能出现不安全因素,为此URL对一些字符进行了限制,关于具体被限制的字符有哪些,和限制原因,可以阅读RFC1738文档http://www.w3.org/Addressing/rfc1738.txt,里面有一节进行了专门的讲解。

  

 

 

 

 

 

参考链接:

[1]  阮一峰, 关于URL编码, http://www.ruanyifeng.com/blog/2010/02/url_encoding.html

[2]  在线RFC1738文档, http://www.rfc-editor.org/rfc/rfc1738.txt

[3] 《javascript权威指南》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值