我一直在尝试将twitter嵌入代码编码到base64中,该代码可能包含也可能不包含一个或多个表情符号。因此,当字符串中包含表情符号时,会出现此错误:
Uncaught DOMException: Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.
我能做些什么,以便当我在字符串上运行btoa()时,它将对包括表情符号的整个字符串进行编码,而当我在php中使用base64_decode对其进行解码时,表情符号会再次出现吗?
谢谢!
答案 0 :(得分:1)
您可以先将其转义,然后再调用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
答案 1 :(得分:1)
使用js-base64库作为
var str = "I was funny ?";
console.log("Original string:", str);
var encodedStr = Base64.encode(str)
console.log("Encoded string:", encodedStr);
var decodedStr = Base64.decode(encodedStr)
console.log("Decoded string:", decodedStr);
<script src="https://cdn.jsdelivr.net/npm/js-base64@2.5.2/base64.min.js"></script>