encodeURI()和encodeURIComponent()方法编码

encodeURI 和 encodeURIComponent都是ECMA-262标准中定义的函数,所有兼容这个标准的语言(如JavaScript, ActionScript)都会实现这两个函数。它们都是用来对URI (RFC-2396)字符串进行编码的全局函数,但是它们的处理方式和使用场景有所不同

RFC-2396中对于URI中的字符分类

  1. 保留字符(reserved characters):这类字符是URI中的保留关键字符,它们用于分割URI中的各个部分。这些字符是:";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
  2. Mark字符(mark characters):这类字符在RFC-2396中特别定义,但是没有特别说明用途,可能是和别的RFC标准相关。 这些字符是:"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
  3. 基本字符(alphanum characters):这类字符是URI中的主体部分,它包括所有的大写字母、小写字母和数字

encodeURI():方法不会对下列字符编码:ASCII字母、数字、~!@#$&*()=:/,;?+'

encodeURIComponent():方法不会对下列字符编码:ASCII字母、数字、~!*()'

使用场景

  1. 对 整个URL 进行编码就使用encodeURI()
  2. 对 URL中的参数或者URL后面的一部分进行编码就使用encodeURIComponent()

var uri="my test.asp?name=ståle&car=saab";
document.write(encodeURI(uri));//my%20test.asp?name=st%C3%A5le&car=saab


var uri="http://jb51.net/my test.asp?name=ståle&car=saab";
document.write(encodeURIComponent(uri));//http%3A%2F%2Fjb51.net%2Fmy%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab

//对URL进行编码
encodeURI("http://xxx.com/你好?a=1")

//google中查询上面这个网址
//正确
encodeURI("http://xxx.com?ip=http://x.com/hello?a=1")

//错误 查询参数被&分隔了,有歧义
//http://x.com/%E4%BD%A0%E5%A5%BD?a=1和&b=2两部分
encodeURI("http://xxx.com?ip=http://x.com/hello?a=1&b=2")


encodeURIComponent("http://xxx.com?ip=http://x.com/hello?a=1&b=2")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值