<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    /**
    * 我在網上看到過很多BASE64的JavaScript算法,都覺得不滿意,于是自己寫了一個,在這里分享一下。
    * 我的代碼在質量的效率都較高,沒有一些冗余的操作。總體來講我覺得非常不錯。
    * 如果大家有什么不懂的地方可以問我。
    */
    var BASE64={
        
    /**
         * 此變量為編碼的key,每個字符的下標相對應于它所代表的編碼。
         
    */
        enKey: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
    +/',
        
    /**
         * 此變量為解碼的key,是一個數組,BASE64的字符的ASCII值做下標,所對應的就是該字符所代表的編碼值。
         
    */
        deKey: 
    new Array(
            
    -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
            
    -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
            
    -1-1-1-1-1-1-1-1-1-1-162-1-1-163,
            
    52535455565758596061-1-1-1-1-1-1,
            
    -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  91011121314,
            
    1516171819202122232425-1-1-1-1-1,
            
    -1262728293031323334353637383940,
            
    4142434445464748495051-1-1-1-1-1
        ),
        
    /**
         * 編碼
         
    */
        encode: 
    function(src){
            
    //用一個數組來存放編碼后的字符,效率比用字符串相加高很多。
            var str=new Array();
            
    var ch1, ch2, ch3;
            
    var pos=0;
           
    //每三個字符進行編碼。
            while(pos+3<=src.length){
                ch1
    =src.charCodeAt(pos++);
                ch2
    =src.charCodeAt(pos++);
                ch3
    =src.charCodeAt(pos++);
                str.push(
    this.enKey.charAt(ch1>>2), this.enKey.charAt(((ch1<<4)+(ch2>>4))&0x3f));
                str.push(
    this.enKey.charAt(((ch2<<2)+(ch3>>6))&0x3f), this.enKey.charAt(ch3&0x3f));
            }
            
    //給剩下的字符進行編碼。
            if(pos<src.length){
                ch1
    =src.charCodeAt(pos++);
                str.push(
    this.enKey.charAt(ch1>>2));
                
    if(pos<src.length){
                    ch2
    =src.charCodeAt(pos);
                    str.push(
    this.enKey.charAt(((ch1<<4)+(ch2>>4))&0x3f));
                    str.push(
    this.enKey.charAt(ch2<<2&0x3f), '=');
                }
    else{
                    str.push(
    this.enKey.charAt(ch1<<4&0x3f), '==');
                }
            }
           
    //組合各編碼后的字符,連成一個字符串。
            return str.join('');
        },
        
    /**
         * 解碼。
         
    */
        decode: 
    function(src){
            
    //用一個數組來存放解碼后的字符。
            var str=new Array();
            
    var ch1, ch2, ch3, ch4;
            
    var pos=0;
           
    //過濾非法字符,并去掉'='。
            src=src.replace(/[^A-Za-z0-9\+\/]/g, '');
            
    //decode the source string in partition of per four characters.
            while(pos+4<=src.length){
                ch1
    =this.deKey[src.charCodeAt(pos++)];
                ch2
    =this.deKey[src.charCodeAt(pos++)];
                ch3
    =this.deKey[src.charCodeAt(pos++)];
                ch4
    =this.deKey[src.charCodeAt(pos++)];
                str.push(String.fromCharCode(
                    (ch1
    <<2&0xff)+(ch2>>4), (ch2<<4&0xff)+(ch3>>2), (ch3<<6&0xff)+ch4));
            }
            
    //給剩下的字符進行解碼。
            if(pos+1<src.length){
                ch1
    =this.deKey[src.charCodeAt(pos++)];
                ch2
    =this.deKey[src.charCodeAt(pos++)];
                
    if(pos<src.length){
                    ch3
    =this.deKey[src.charCodeAt(pos)];
                    str.push(String.fromCharCode((ch1
    <<2&0xff)+(ch2>>4), (ch2<<4&0xff)+(ch3>>2)));
                }
    else{
                    str.push(String.fromCharCode((ch1
    <<2&0xff)+(ch2>>4)));
                }
            }
           
    //組合各解碼后的字符,連成一個字符串。
            return str.join('');
        }
    };

    使用方法:

    var str='hello world!';
    var enstr=BASE64.encode(str);
    alert(enstr);
    var destr=BASE64.decode(enstr);
    alert(destr);
    posted on 2007-07-20 13:00 蘆葦 閱讀(1920) 評論(2)  編輯  收藏 所屬分類: HTML & Script

    Feedback

    # re: JavaScript 的 BASE64 算法 2008-08-01 03:54 ss
    覺得非常不錯。
      回復  更多評論
      

    # re: JavaScript 的 BASE64 算法 2012-07-25 09:35 Lou
    不支持中文!  回復  更多評論
      

    主站蜘蛛池模板: 全黄A免费一级毛片| 亚洲Av无码乱码在线播放| 亚洲av无码一区二区三区网站| 亚洲精品动漫免费二区| 野花高清在线观看免费完整版中文| 亚洲视频免费在线看| 99久久久国产精品免费牛牛四川| 亚洲av无码一区二区三区网站| 男女午夜24式免费视频| 亚洲AV无码码潮喷在线观看| 麻豆成人久久精品二区三区免费| 亚洲免费在线视频| 真人做A免费观看| 日本亚洲免费无线码 | 亚洲精品你懂的在线观看 | 57pao国产成永久免费视频| 亚洲高清无在码在线电影不卡| 91青青青国产在观免费影视| 亚洲国产模特在线播放| 在线精品免费视频无码的| 色九月亚洲综合网| 亚洲AV无码乱码国产麻豆穿越| 免费人成毛片动漫在线播放| 亚洲图片校园春色| 日韩a在线观看免费观看| 极品美女一级毛片免费| 亚洲国产精品成人久久| 永久免费av无码网站韩国毛片| 蜜桃传媒一区二区亚洲AV| 色噜噜亚洲精品中文字幕| 国产精彩免费视频| 黄色a三级三级三级免费看| 国产亚洲综合久久系列| 国产91免费视频| 亚洲另类激情综合偷自拍图| 亚洲黄色免费网址| 特级毛片在线大全免费播放| 久久精品亚洲精品国产色婷| 永久免费视频v片www| 国产免费拔擦拔擦8X高清在线人 | 在线观看亚洲网站|