javascript正常的英文编码是utf-8的,mysql默认存的也是这种编码,而emoji表情是utf-16的,这就导致了db存储emoji会有问题,所以最好的方式是,把emoji先转成utf-8的这种实体编码,存到数据库里,要使用的时候,从db拿出来,再解码成utf-16的形式。

原文章

{// 表情转码utf16toEntities(str) {const patt = /[\ud800-\udbff][\udc00-\udfff]/g; // 检测utf16字符正则str = str.replace(patt, (char) => {let H;let L;let code;let s;if (char.length === 2) {H = char.charCodeAt(0); // 取出高位L = char.charCodeAt(1); // 取出低位code = (H - 0xD800) * 0x400 + 0x10000 + L - 0xDC00; // 转换算法s = `&#${code};`;} else {s = char;}return s;});return str;},// 表情解码entitiestoUtf16(strObj) {const patt = /&#\d+;/g;const arr = strObj.match(patt) || [];let H;let L;let code;for (let i = 0; i < arr.length; i += 1) {code = arr[i];code = code.replace('&#', '').replace(';', '');// 高位H = Math.floor((code - 0x10000) / 0x400) + 0xD800;// 低位L = ((code - 0x10000) % 0x400) + 0xDC00;code = `&#${code};`;const s = String.fromCharCode(H, L);strObj = strObj.replace(code, s);}return strObj;}
}

使用示例

const s = 'test emoji 												

js转码与解码emoji相关推荐

  1. Zepto.js 源码解析(emoji版)

    graph LR A($) --- B(function) A($) --- C(zepto) A($) --- D(fn) C(zepto) --- CA(init) C(zepto) --- CB ...

  2. php js转码解码函数,javascript如何实现URL的转码与解码?

    本篇文章给大家带来的内容是关于javascript如何实现URL的转码与解码?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. escape 和 unescape escape() ...

  3. js encodeuri转码和解码

    js encodeuri转码和解码教程如下: 输入一段html代码 实现结果:将代码加密 js实现代码如下: /*! JSFuck 0.4.0 - http://jsfuck.com */(funct ...

  4. js地址栏转码与解码

    encodeURIComponent 和 decodeURIComponent(转码和解码) encodeURIComponent (URL)这样使用

  5. three.js 源码注释(一)./Three.js

    商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 -  本博客专注于 敏捷开发 ...

  6. 【WangEditor】使用富文本编辑器 WangEditor 实现用户自定义图片大小(改js源码)

    效果图 1.WangEditor本身提供的 "编辑图片" 功能,调整图片大小选项只能为30%,50%,100%. 2.修改 wangEditor.js 源码后,用户可以输入自定义大 ...

  7. 图片路径转码与解码(学习)

    有时候图片路径在页面跳转时传参需要进行转码与解码方可完整的路径传过去 js携带的编码(转码)方法  encodeURIComponent()   和解码方法  decodeURIComponent() ...

  8. 【笔记-vue】《imooc-vue.js高仿饿了么》、《imooc-vue 音乐app》、《imooc-vue.js源码全方位解析》

    20170709 - 20171128:<imooc-vue.js高仿饿了么> 一.第一章 课程简介 1-1课程简介 1.需求分析-脚手架工具-数据mock-架构设计-代码编写-自测-编译 ...

  9. php 微信表情 转码和解码方法

    php 微信表情存数据转义方法 表情转码 表情解码 表情转码 /** 转义emoji*/ function userTextEncode($str){if(! is_string($str)) ret ...

最新文章

  1. 什么是OKR?目标管理如何做?
  2. VS2010解决方案转换到VS2008
  3. UVA1601万圣节的早上
  4. 厉害了!用 JS 实现人脑和计算机交互
  5. 关于前段与后端数据库的连接
  6. PyCharm汉化后无法打开Settings设置
  7. C++ 优先级队列(priority_queue)
  8. 王者荣耀服务器维护七月三号,王者荣耀3月23日更新维护公告 自然之灵拼图活动开启...
  9. 计算机考研复试之数据库
  10. 使用tkinter打造一个小说下载器,想看什么小说,就下什么
  11. C++程序设计:相反数
  12. iPhone4S、iPod5代、iPad2、iPad3、mini1代完美绕激活工具Sliver发布全新6.0版,支持工厂激活FMI OFF
  13. Oracle DG主库失败Failover参考
  14. 计算机的记事本和写字板的功能,记事本和写字板有什么不同?功能上
  15. 618营销新动向:Swisse年轻化产品教育成电商战场新突破口!
  16. 关于windows server 2016服务器 exchange 2010 managment Shell 停止工作的问题(已解决)
  17. c语言有三级指针,C语言 三级指针的应用
  18. Prege(图计算框架)l: A System for Large-Scale Graph Processing(译)
  19. iris web框架无法加载静态文件
  20. BP API: cl_md_bp_maintain

热门文章

  1. python functiontype_Python多处理PicklingError:无法pickletype'function'
  2. pidstat命令(pidstat一键脚本、linux进程异常排查和性能分析)
  3. Fusion设计平台概念-synopsys芯片设计技术篇(三)
  4. 泛微发布全程数字化项目管理平台-事井然
  5. 计算机派位志愿填报技巧,小升初微机派位志愿填报正确方式是……
  6. 中兴通讯与中国电信,联合发布家端新品
  7. 有什么方便操作、下班后在家带孩子、比较好的兼职或副业项目吗?
  8. 春节如何巧妙躲过发红包?一般人我不告诉他!内附教程,千万不要外传!
  9. Kotlin传递可变长参数给Java可变参数方法
  10. Docker学习(第一阶段)