简介:介绍 URL 和 URI的区别,以及 URI 编码解码和 base64
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
3escape('春节');
//"%u6625%u8282"
//在Unicode字符集中,"春"是第6625个(十六进制)字符,"节"是第8282个(十六进制)字符。encodeURI(82个):!#$&’()*+,/:;=?@-._~0-9a-zA-Z
对 URL编码,对应的解码函数decodeURI()。
注意:它不对单引号’编码。1
2encodeURI('春节');
//"%E6%98%A5%E8%8A%82"encodeURIComponent(71个):!’()*-._~0-9a-zA-Z
与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。1
2
3
4
5encodeURI('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编码,可以解决这个问题, 代码来自于MDN1
2
3
4
5
6
7
8function utf8_to_b64( str ) {
return window.btoa(unescape(encodeURIComponent( str )));
}
// window.atob 的方法对接受到的base64数据进行解码
function b64_to_utf8( str ) {
return decodeURIComponent(escape(window.atob( str )));
}