HTML5原生支持Base64编码解码

2019PHP高薪工程师学习路线图....>>>

该方法仅支持IE10+、chrome、等现代浏览器。

适合用于原生支持的

(function(){
	var Base64 = {
		encode : function(str){
			return window.btoa(unescape(encodeURIComponent(str)));
		},
		decode : function(str){
			return decodeURIComponent(escape(window.atob(str)));
		}
	};
	window.BASE64 = Base64;
})();

旧版本兼容

(function() {
	if (!window.btoa) {
		var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		window.btoa = function(c) {
			var d = "";
			var m, k, h = "";
			var l, j, g, f = "";
			var e = 0;
			do {
				m = c.charCodeAt(e++);
				k = c.charCodeAt(e++);
				h = c.charCodeAt(e++);
				l = m >> 2;
				j = ((m & 3) << 4) | (k >> 4);
				g = ((k & 15) << 2) | (h >> 6);
				f = h & 63;
				if (isNaN(k)) {
					g = f = 64
				} else {
					if (isNaN(h)) {
						f = 64
					}
				}
				d = d + a.charAt(l) + a.charAt(j) + a.charAt(g) + a.charAt(f);
				m = k = h = "";
				l = j = g = f = ""
			} while (e < c.length);
			return d
		};
		window.atob = function(c) {
			var d = "";
			var m, k, h = "";
			var l, j, g, f = "";
			var e = 0;
			do {
				l = a.indexOf(c.charAt(e++));
				if (l < 0) {
					continue
				}
				j = a.indexOf(c.charAt(e++));
				if (j < 0) {
					continue
				}
				g = a.indexOf(c.charAt(e++));
				if (g < 0) {
					continue
				}
				f = a.indexOf(c.charAt(e++));
				if (f < 0) {
					continue
				}
				m = (l << 2) | (j >> 4);
				k = ((j & 15) << 4) | (g >> 2);
				h = ((g & 3) << 6) | f;
				d += String.fromCharCode(m);
				if (g != 64) {
					d += String.fromCharCode(k)
				}
				if (f != 64) {
					d += String.fromCharCode(h)
				}
				m = k = h = "";
				l = j = g = f = ""
			} while (e < c.length);
			return d
		}
	}
	var b = {
		encode: function(c) {
			return window.btoa(unescape(encodeURIComponent(c)))
		},
		decode: function(c) {
			return decodeURIComponent(escape(window.atob(c)))
		}
	};
	window.BASE64 = b
})();