Как base64 кодировать эмодзи в JavaScript? - PullRequest
0 голосов
/ 18 июня 2019

Я пытался закодировать код для встраивания в твиттер в base64, который может содержать или не содержать один или несколько эмодзи.Поэтому, когда в строке есть эмодзи, я получаю эту ошибку: Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.

Могу ли я что-нибудь сделать, чтобы при запуске btoa () на моей строке она кодировала всю строку, включая эмодзии когда я декодирую его с помощью base64_decode в php, эмодзи появляется снова?

Заранее спасибо!

1 Ответ

1 голос
/ 18 июня 2019

Вы можете закодировать его, сначала экранировав, а затем вызвав для него EncodeUriComponent.

Это выглядит так:

btoa(unescape(encodeURIComponent('?')));

Приведенный выше эмодзи вернул бы "8J + Ygg =="

Чтобы декодировать его, вы должны сделать это

decodeURIComponent(escape(window.atob('8J+Ygg==')));

Вы можете сделать две функции, которые немного упростят эту задачу:

//Encode
function utoa(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
}
//Decode
function atou(str) {
    return decodeURIComponent(escape(window.atob(str)));
}

Источник: https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...