使用 Javascript 實現網址 Base64 編碼
                    
                    2010/06/25
                
                
            為什麼需要對參數進行編碼?相信有過開發的經驗的廣大程序員都知道,在Web中,若是直接在Url地址上傳遞參數值,若是中文,或者+等什麼的就會出現亂碼現象,若是數字或者英文的好像沒有什麼問題,簡言之,傳遞過來的參數是需要進行編碼的。
在這裡,也許有人會說,為什麼不直接用Server.UrlDecode和Server.UrlEncode這兩個來進行編碼和解碼的操作呢?
這個 JavaScript代碼用於編碼 /解碼數據用base64(該編碼是為了使二進制數據傳輸通過傳輸層生存是不是8位乾淨)。 腳本是完全兼容使用UTF - 8編碼。 你可以使用base64編碼的數據,簡單的加密機制。
如果您計劃使用UTF - 8編碼在您的項目不要忘記設置網頁的編碼為 UTF - 8(內容類型的元標記)。
/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Base64 = {
 
        // private property
       _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
     // public method for encoding
     encode : function (input) {
               var output = "";
          var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
             var i = 0;
 
         input = Base64._utf8_encode(input);
 
                while (i < input.length) {
 
                      chr1 = input.charCodeAt(i++);
                     chr2 = input.charCodeAt(i++);
                     chr3 = input.charCodeAt(i++);
 
                      enc1 = chr1 >> 2;
                   enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
                   enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
                  enc4 = chr3 & 63;
 
                      if (isNaN(chr2)) {
                                enc3 = enc4 = 64;
                 } else if (isNaN(chr3)) {
                         enc4 = 64;
                        }
 
                  output = output +
                 this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
                   this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
 
             }
 
          return output;
    },
 
 // public method for decoding
     decode : function (input) {
               var output = "";
          var chr1, chr2, chr3;
             var enc1, enc2, enc3, enc4;
               var i = 0;
 
         input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
          while (i < input.length) {
 
                      enc1 = this._keyStr.indexOf(input.charAt(i++));
                   enc2 = this._keyStr.indexOf(input.charAt(i++));
                   enc3 = this._keyStr.indexOf(input.charAt(i++));
                   enc4 = this._keyStr.indexOf(input.charAt(i++));
 
                    chr1 = (enc1 << 2) | (enc2 >> 4);
                     chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
                  chr3 = ((enc3 & 3) << 6) | enc4;
 
                 output = output + String.fromCharCode(chr1);
 
                       if (enc3 != 64) {
                         output = output + String.fromCharCode(chr2);
                      }
                 if (enc4 != 64) {
                         output = output + String.fromCharCode(chr3);
                      }
 
          }
 
          output = Base64._utf8_decode(output);
 
              return output;
 
     },
 
 // private method for UTF-8 encoding
      _utf8_encode : function (string) {
                string = string.replace(/\r\n/g,"\n");
            var utftext = "";
 
          for (var n = 0; n < string.length; n++) {
 
                       var c = string.charCodeAt(n);
 
                      if (c < 128) {
                         utftext += String.fromCharCode(c);
                        }
                 else if((c > 127) && (c < 2048)) {
                          utftext += String.fromCharCode((c >> 6) | 192);
                             utftext += String.fromCharCode((c & 63) | 128);
                       }
                 else {
                            utftext += String.fromCharCode((c >> 12) | 224);
                            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                          utftext += String.fromCharCode((c & 63) | 128);
                       }
 
          }
 
          return utftext;
   },
 
 // private method for UTF-8 decoding
      _utf8_decode : function (utftext) {
               var string = "";
          var i = 0;
                var c = c1 = c2 = 0;
 
               while ( i < utftext.length ) {
 
                  c = utftext.charCodeAt(i);
 
                 if (c < 128) {
                         string += String.fromCharCode(c);
                         i++;
                      }
                 else if((c > 191) && (c < 224)) {
                           c2 = utftext.charCodeAt(i+1);
                             string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                         i += 2;
                   }
                 else {
                            c2 = utftext.charCodeAt(i+1);
                             c3 = utftext.charCodeAt(i+2);
                             string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                           i += 3;
                   }
 
          }
 
          return string;
    }
 
}