javascript - 如何在 JavaScript 中对表情符号进行 base64 编码?
问题描述
我一直在尝试将 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 对其进行解码时,表情符号会再次出现?
提前致谢!
解决方案
您可以通过先对其进行转义然后在其上调用 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
推荐阅读
- string - 删除调查中包含特殊字符的重复答案
- context-free-grammar - 来自语言的上下文无关语法
- php - 获取给定路线的所有 GPS 位置点 (PHP)
- javascript - 如何对动态添加的元素执行动态操作?
- javascript - Node JS Express 服务器 - 跨域请求被阻止,即使有所有正确的标头
- reactjs - 获取存储数据并调度外部组件反应原生
- php - 如何更新数据库。将数据库中的数据添加到表单后
- android - 不给我返回值
- ruby-on-rails - 无法自动加载常量 JWTBlacklist,需要 /home/sourabh/dev/celebration/app/models/jwt_blacklist.rb 来定义它(LoadError)
- fastlane - Fastlane 匹配不使用现有的签名证书