1 function base64_decode(data){
2 var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
3 var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,ac = 0,dec = "",tmp_arr = [];
4 if (!data) { return data; }
5 data += '';
6 do {
7 h1 = b64.indexOf(data.charAt(i++));
8 h2 = b64.indexOf(data.charAt(i++));
9 h3 = b64.indexOf(data.charAt(i++));
10 h4 = b64.indexOf(data.charAt(i++));
11 bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
12 o1 = bits >> 16 & 0xff;
13 o2 = bits >> 8 & 0xff;
14 o3 = bits & 0xff;
15 if (h3 == 64) {
16 tmp_arr[ac++] = String.fromCharCode(o1);
17 } else if (h4 == 64) {
18 tmp_arr[ac++] = String.fromCharCode(o1, o2);
19 } else {
20 tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
21 }
22 } while (i < data.length);
23 dec = tmp_arr.join('');
24 dec = utf8_decode(dec);
25 return dec;
26 }