URI编码方法

javascript 专栏收录该内容
7 篇文章 0 订阅

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
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

爱编程的兔子

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值