Mã hóa Base64 trong javascript

0 k thích
Mình có một đoạn php script để mã hóa ảnh PNG ra chuỗi Base64, khá đơn giản vì php có hỗ trợ.
Và mình muốn hỏi cách làm tương tự trong javascript !
avatar đã hỏi ngày 5 tháng 3 năm 2017 bởi khoa02031995 (620 điểm)  

7 Trả lời

0 k thích
Nếu bạn viết cho Firefox Hoặc Chrome thì bạn có thể dùng các hàm [url=https://developer.mozilla.org/En/DOM/Window.btoa]btoa()[/url] và [url=https://developer.mozilla.org/en/DOM/window.atob]atob()[/url] để convert và giải ngược lại một chuỗi Base64, nếu không thì bạn có thể xem [url=http://stackoverflow.com/questions/246801/how-can-you-encode-to-base64-using-javascript#246813]Ví Dụ[/url] này
avatar trả lời ngày 5 tháng 3 năm 2017 bởi luongminhanh (750 điểm)  
0 k thích
Mình tìm được một [url=http://www.webtoolkit.info/javascript-base64.html]ví dụ[/url] :
[code]/**
*
*  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;
}

}[/code]
avatar trả lời ngày 5 tháng 3 năm 2017 bởi h4ck3r (640 điểm)  
0 k thích
Với Javascript bạn có thể làm như sau :
[code]// if this is your Base64 encoded string
var str = 'VGhpcyBpcyBhbiBhd2Vzb21lIHNjcmlwdA==';

// make URL friendly:
str = str.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, '');

// reverse to original encoding
str = (str + '===').slice(0, str.length + (str.length % 4));
str = str.replace(/-/g, '+').replace(/_/g, '/');[/code]
Hoặc xem [url=http://jsfiddle.net/magikMaker/7bjaT/]ví dụ này[/url]
avatar trả lời ngày 5 tháng 3 năm 2017 bởi vovantinit (970 điểm)  
0 k thích
Hoặc có thể dung [url=https://github.com/carlo/jquery-base64]jquery-base64 plugin[/url] như sau :
[code]$.base64.encode( "this is a test" );
$.base64.decode( "dGhpcyBpcyBhIHRlc3Q=" );[/code]
avatar trả lời ngày 5 tháng 3 năm 2017 bởi dieuhien (460 điểm)  
0 k thích
Mình xin lưu ý là cách encode trên không áp dụng cho chuỗi unicode thuần, có thể [url=https://developer.mozilla.org/en-US/docs/DOM/window.btoa]tham khảo ở đây[/url]
encode :
[code]var encodedData = window.btoa(stringToEncode);[/code]
decode :
[code]var decodedData = window.atob(encodedData);[/code]
avatar trả lời ngày 5 tháng 3 năm 2017 bởi yourlove_is_mylife (620 điểm)  
0 k thích
Nếu muốn encode một HTML image object thì có thể làm như sau :
[code]function getBase64Image(img) {  
  var canvas = document.createElement("canvas");  
  canvas.width = img.width;  
  canvas.height = img.height;  
  var ctx = canvas.getContext("2d");  
  ctx.drawImage(img, 0, 0);  
  var dataURL = canvas.toDataURL("image/png");  
  // escape data:image prefix
  return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");  
  // or just return dataURL
  // return dataURL
}  [/code]
để lấy một image bằng id thì làm như sau :

[code]function getBase64ImageById(id){  
  return getBase64Image(document.getElementById(id));  
} [/code]
hoặc có thể [url=http://drcreazy.com/art/61/base64-javascript.aspx]xem thêm[/url] ở đây
avatar trả lời ngày 5 tháng 3 năm 2017 bởi leminhtai (830 điểm)  
0 k thích

First things first, you'll want to set a fixed target date because you will completely quit, for example 2 or 3 weeks from now. Core maca from the supplier energetix is definitely an herb that tests very well for several males.
http://www.generiqueviagrafr.fr/chemical-composition-of-sildenafil</a>

trả lời ngày 29 tháng 12 năm 2017 bởi Abeewayeagesee  
...