function base64_encode( data ) { // Encodes data with MIME base64
//
// + original by: Tyler Akins (http://rumkin.com)
// + improved by: Bayron Guevara
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
do { // pack three octets into four hexets
o1 = data.charCodeAt(i++);
o2 = data.charCodeAt(i++);
o3 = data.charCodeAt(i++);
bits = o1<<16 | o2<<8 | o3;
h1 = bits>>18 & 0x3f;
h2 = bits>>12 & 0x3f;
h3 = bits>>6 & 0x3f;
h4 = bits & 0x3f;
// use hexets to index into b64, and append result to encoded string
enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
} while (i < data.length);
switch( data.length % 3 ){
case 1:
enc = enc.slice(0, -2) + '==';
break;
case 2:
enc = enc.slice(0, -1) + '=';
break;
}
return enc;
}
Спасибо! Использую encode decode для простенькой шифровки/расшифровки.
Функция работает неправильно.
Hint: Смотрим спецификацию charCodeAt
Подтверждаю! Функция со спецсимволами и пр. юникодной изюминой работает неправильно! Вы бы хоть тестировали перед выкладкой, что ли...
Вот полностью рабочий вариант:
вот вариант для чтения бинариков на странице с вин1251 кодировкой
функция в принципе правильная, только в конце текста надо добавлять
'=' при не полном наборе символов. В жизни разницы не заметил, хотя может глюки при декодировании в PHP из за этого. Подправленный код -
скорость обработки 3-4 метров в секунду. так что норм.
Конечно, на PHP это сделать проще, но удобно использовать в HTML Aplication
глупо всё это.
в современных браузерах давно уже есть atob() и btoa ()
Не надо ля-ля. Моя функция работает и работает нормально! А atob и btoa работают только с английскими символами.
2 elagin91 - не работает. Сбивается на слове Волобуев записанном в utf-8. Самому смешно, но факт.
Не знаю, где и как ты тестировал, но у меня всё норм.
Спасибо за функцию. Идеально подходит для моего менеджера паролей. Правда я немного кода всё же добавил для кодирования двоичных данных (т.е. любых массивов)