Функции base64 на JavaScript
По умолчанию в JavaScript отсутствуют штатные функции преобразования данных по алгоритму Base64. Ниже приведены две функции для base64-кодирования и декодирования на JavaScript. Их удобно использовать при передаче различных данных через AJAX или через web-формы, а также для хранения в исходном коде бинарных данных, например, зашифрованных строк.Code (HTML) : Убрать нумерацию
- // Функция кодирования строки в base64
- function base64encode(str) {
- // Символы для base64-преобразования
- var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'+
- 'hijklmnopqrstuvwxyz0123456789+/=';
- var b64encoded = '';
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- for (var i=0; i<str.length;) {
- chr1 = str.charCodeAt(i++);
- chr2 = str.charCodeAt(i++);
- chr3 = str.charCodeAt(i++);
- enc1 = chr1 >> 2;
- enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
- enc3 = isNaN(chr2) ? 64:(((chr2 & 15) << 2) | (chr3 >> 6));
- enc4 = isNaN(chr3) ? 64:(chr3 & 63);
- b64encoded += b64chars.charAt(enc1) + b64chars.charAt(enc2) +
- b64chars.charAt(enc3) + b64chars.charAt(enc4);
- }
- return b64encoded;
- }
Code (HTML) : Убрать нумерацию
- // Функция декодирования строки из base64
- function base64decode(str) {
- // Символы для base64-преобразования
- var b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'+
- 'hijklmnopqrstuvwxyz0123456789+/=';
- var b64decoded = '';
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- str = str.replace(/[^a-z0-9\+\/\=]/gi, '');
- for (var i=0; i<str.length;) {
- enc1 = b64chars.indexOf(str.charAt(i++));
- enc2 = b64chars.indexOf(str.charAt(i++));
- enc3 = b64chars.indexOf(str.charAt(i++));
- enc4 = b64chars.indexOf(str.charAt(i++));
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
- b64decoded = b64decoded + String.fromCharCode(chr1);
- if (enc3 < 64) {
- b64decoded += String.fromCharCode(chr2);
- }
- if (enc4 < 64) {
- b64decoded += String.fromCharCode(chr3);
- }
- }
- return b64decoded;
- }
Code (HTML) : Убрать нумерацию
- // Пример использования функций
- alert (base64encode ('ManHunter / PCL'));
- alert (base64decode ('SGF2ZSBhIE5pY2UgRGF5IQ=='));
Просмотров: 16344 | Комментариев: 14
Метки: JavaScript, base64
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Антон
(26.07.2018 в 02:46):
Спасибо огромное!!!!ВЫРУЧИЛ!!!!!
ManHunter
(31.01.2017 в 13:52):
Видимо, потому что btoa не поддерживается Internet Explorer 6-9
Anonymous
(31.01.2017 в 12:13):
А почему бы просто не использовать btoa("string"); ?
ManHunter
(27.12.2012 в 15:01):
в юникоде
Михаил
(27.12.2012 в 15:00):
Я нашел очень странную и непонятную ошибку, если кодировать строку начинающуюся с букв "вк", например "вконтакте", после вк образуются непонятные каракули. Не могли бы вы подсказать в чем тут дело?
Руслан
(29.06.2012 в 20:38):
ну можно отсекать запятую с пробелом, в крайнем случае ссылку запостят в виде строки ",%20..."
ManHunter
(29.06.2012 в 18:42):
Он-то как раз знает. Не знают те, кто на своих сайтах по какой-то причине используют запятую в параметрах, и ради которых ее пришлось включать в парсер. Я бы тоже с огромным удовольствием активировал все до запятой.
Руслан
(29.06.2012 в 18:39):
В текущей версии оперы например btoa и atob работают или только с ASCII или просто некорректно с UTF-8 строками, короче выдает ошибку. Я пользуюсь этим http://www.webtoolkit.info/jav...-base64.html с небольшими правками отсюда http://stackoverflow.com/a/6836708, хотя как я понял это то же решение на что дал ссылки Cyko.
С русскими не работает потому что нужно перед работой перевести utf-8 коды символов кириллицы в два-три байта или наоборот. По ссылкам выше это делают utf8_encode и utf8_decode.
ManHunter, парсер для ссылок в комментах не знает о знаках пунктуации )
С русскими не работает потому что нужно перед работой перевести utf-8 коды символов кириллицы в два-три байта или наоборот. По ссылкам выше это делают utf8_encode и utf8_decode.
ManHunter, парсер для ссылок в комментах не знает о знаках пунктуации )
Он
(11.05.2012 в 14:43):
Почему не работает с русскими буквами?
Infocatcher
(24.06.2011 в 20:46):
В Firefox, Opera, Chrome и Safari есть btoa() и atob():
https://developer.mozilla.org/.../window.btoa
https://developer.mozilla.org/.../window.atob
А IE как обычно особенный. :)
https://developer.mozilla.org/.../window.btoa
https://developer.mozilla.org/.../window.atob
А IE как обычно особенный. :)
ManHunter
(23.06.2011 в 23:49):
Of course, another great site! Thx :)
Cyko
(23.06.2011 в 23:21):
ManHunter
(23.06.2011 в 10:56):
Главное, что очень хорошо для понимания алгоритма.
Isaev
(23.06.2011 в 02:10):
Компактно!
Добавить комментарий
Заполните форму для добавления комментария