<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 蘆葦 閱讀(1911) 評論(2)  編輯  收藏 所屬分類: HTML & Script

    Feedback

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

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

    主站蜘蛛池模板: 国产精品久久免费| 中文字幕在线成人免费看| 99久久久国产精品免费牛牛四川 | 人妻免费久久久久久久了| 国产精品四虎在线观看免费| 亚洲大成色www永久网址| 一个人免费观看在线视频www | 爱情岛论坛亚洲品质自拍视频网站| 色播在线永久免费视频| 亚洲av最新在线观看网址| 国产一级高清免费观看| 国产亚洲视频在线观看网址| 亚洲一区二区高清| 国产日韩AV免费无码一区二区| 久久青青草原亚洲AV无码麻豆| 久久成人免费电影| 亚洲成a人片7777| 日本免费人成视频播放| eeuss影院免费92242部| 亚洲国产精品免费视频| 久久受www免费人成_看片中文| 亚洲精华国产精华精华液网站| 国产免费啪嗒啪嗒视频看看| jizz免费在线观看| 久久久亚洲欧洲日产国码农村| 台湾一级毛片永久免费| 亚洲AV无码成人网站在线观看| 亚洲自偷自偷图片| 日韩精品内射视频免费观看| 亚洲欧洲日韩极速播放| 亚洲成A人片77777国产| 日本免费电影一区二区| 亚洲一区中文字幕在线观看| 亚洲国产精品成人久久蜜臀| 国产午夜成人免费看片无遮挡| 亚洲精品第一综合99久久| 亚洲国产精品自产在线播放| 午夜免费福利视频| 亚洲aⅴ无码专区在线观看春色 | 国产成人精品免费大全| 亚洲明星合成图综合区在线|