0x00
最近做一个单页代理,本来只是想随便做一个方便一下简单翻墙,现在觉得这东西还挺有必要的,得好好做一下,用到了一些编码函数,这里就总结一下。
很多内容从网上抄来的,见谅。
URL编码
a='http://www.baidu.com/s?wd=老王&p=365#title1'
escape(a)
"http%3A//www.baidu.com/s%3Fwd%3D%u8001%u738B%26p%3D365%23title1"
encodeURI(a)
"http://www.baidu.com/s?wd=%E8%80%81%E7%8E%8B&p=365#title1"
encodeURIComponent(a)
"http%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%E8%80%81%E7%8E%8B%26p%3D365%23title1"
unescape(escape(a))==a
true
decodeURI(encodeURI(a))==a
true
decodeURIComponent(encodeURIComponent(a))==a
true
escape()
会排除* + - . / @ _ 0-9 a-z A-Z
encodeURI()
会排除! # $ & ' ( ) * + , - . / : ; = ? @ _ ~ 0-9 a-z A-Z
encodeURIComponent()
会排除! ' ( ) * - . _ ~ 0-9 a-z A-Z
escape()
所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)
encodeURI()
可直接编码URI并且可以被浏览器识别,另外两个会破坏URI中的语法,不能继续作为URI直接使用。
encodeURIComponent()
把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。
进制转换
//十进制转其他
var x=110;
alert(x);
alert(x.toString(8));
alert(x.toString(32));
alert(x.toString(16));
//其他转十进制
var x='110';
alert(parseInt(x,2));
alert(parseInt(x,8));
alert(parseInt(x,16));
//其他转其他
//先用parseInt转成十进制再用toString转到目标进制
alert(String.fromCharCode(parseInt(141,8)))
alert(parseInt('ff',16).toString(2));
ASCII & HEX
//ASCII
'A'.charCodeAt()
65
String.fromCharCode(65)
"A"
//HEX
'A'.charCodeAt().toString(16)
"41"
String.fromCharCode(parseInt('A'.charCodeAt().toString(16),16))
"A"
String.fromCharCode(parseInt("41",16))
"A"
BASE64
btoa('password')
"cGFzc3dvcmQ="
atob("cGFzc3dvcmQ=")
"password"