URL 和 URI

URL-和-URI

简介:介绍 URL 和 URI的区别,以及 URI 编码解码和 base64

URL 和 URI 区别

URL-和-URI

维基百科

URI可以分为URL,URN或同时具备locators 和names特性的一个东西。URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式。

URI: Uniform Resource Identifier,是一个紧凑的字符串用来标示抽象或物理资源,标记了一个网络资源。’说白了就是确定某一东西的身份,是什么?’

URL: Uniform Resource Locator,标记了一个WWW互联网资源(用地址标记),并给出了他的访问地址。 ‘这个东西在哪里’


URI编码解码和base64

URI编码解码

  • escape(69个):*/@+-._0-9a-zA-Z
    返回一个字符的Unicode编码值,对应的解码函数 unescape(),不提倡使用。
    注意:escape()不对”+”编码。但是网页在提交表单的时候,如果有空格,则会被转化为+字符

    1
    2
    3
    escape('春节'); 
    //"%u6625%u8282"
    //在Unicode字符集中,"春"是第6625个(十六进制)字符,"节"是第8282个(十六进制)字符。
  • encodeURI(82个):!#$&’()*+,/:;=?@-._~0-9a-zA-Z
    对 URL编码,对应的解码函数decodeURI()。
    注意:它不对单引号’编码。

    1
    2
    encodeURI('春节');
    //"%E6%98%A5%E8%8A%82"
  • encodeURIComponent(71个):!’()*-._~0-9a-zA-Z
    与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。

    1
    2
    3
    4
    5
    encodeURI('http://www.baidu.com?key=春节')
    "http://www.baidu.com?key=%E6%98%A5%E8%8A%82"

    encodeURIComponent('http://www.baidu.com?key=春节')
    "http%3A%2F%2Fwww.baidu.com%3Fkey%3D%E6%98%A5%E8%8A%82"

base64
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。编码规则是每3个8位字节为一组,分成4组6位字节,并且每个字节的高位补零,形成4个8位的字节。

window.btoa() 从 String 对象中创建一个 base-64 编码的 ASCII 字符串,其中字符串中的每个字符都被视为一个二进制数据字节。

Unicode 字符
先把Unicode字符串转换为UTF-8编码,可以解决这个问题, 代码来自于MDN

1
2
3
4
5
6
7
8
function utf8_to_b64( str ) {
return window.btoa(unescape(encodeURIComponent( str )));
}

// window.atob 的方法对接受到的base64数据进行解码
function b64_to_utf8( str ) {
return decodeURIComponent(escape(window.atob( str )));
}

本文标题:URL 和 URI

文章作者:AngellinaZ

发布时间:2018年11月07日 - 09:11

最后更新:2019年01月23日 - 16:01

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------