URI编码方法

Global对象的encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()方法对URI(Uniform Resource Identifiers,通用资源标识符)进行编码和解码,以便发送给浏览器。
有效的URI中不能包含某些字符,例如:空格、中文、+等,而以上两个编码方法可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器可以接受和理解。
encodeURI()主要用于整个URIencodeURIComponent()主要用于对URI中的某一段进行编码,两者的主要区别:
encodeURI()不会对本身属于URI的特殊字符进行编码,例如:“: / ? #”;而encodeURIComponent()则会对发现的任何非标准字符进行编码。例如:

var uri = "http://10.88.54.23:8020/test/images 图片翻转.html#start";
console.log("encodeURI(uri)");
console.log(encodeURI(uri));
console.log("encodeURIComponent(uri)");
console.log(encodeURIComponent(uri));

输出结果:
这里写图片描述

以上可以看到,encodeURI()编码后的结果是除了空格和汉字之外的其他字符都是原封不动的,但是encodeURIComponent()则使用对应的编码替换所有非字母数字的字符。这就是对整个URI使用encodeURI(),而只能对附加在现有URI后面的字符串使用encodeURIComponent()的原因。

decodeURI()只能对使用encodeURI()替换的字符进行解码,但是decodeURIComponent()可以解码任何特殊字符的编码。

var uriEncode = encodeURI(uri);
var uriEncodeComponent = encodeURIComponent(uri);
console.log("decodeURI(uriEncode)");
console.log(decodeURI(uriEncode));
console.log("decodeURIComponent(uriEncode)");
console.log(decodeURIComponent(uriEncode));
console.log("decodeURIComponent(uriEncodeComponent)");
console.log(decodeURIComponent(uriEncodeComponent));

结果:
这里写图片描述

调用decodeURIComponent()方法所有特殊字符编码都被替换成了原来的字符,得到了一个未经转义的字符,但是这个字符并不是一个有效的URI。这是为什么呢?
这里的四个方法都是以Unicode标准进行编码解码的,也就是说将汉字视为3字节进行处理,一个汉字编码后变为类似的%hh%hh%hh的形式,相应的,解码函数的参数必须和编码结果的格式保持一致,这样二者才可以实现互逆,否则就会报错“被解码的URI不是合法的编码”。我们程序中常用的GB2312,GBK,UTF-8处理中文都是2字节的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值