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"
最后修改:2019 年 01 月 28 日
如果觉得我的文章对你有用,请随意赞赏