一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢?原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。这要怎么办呢
1、使用utf8mb4字符集
1、mysql的版本必须为v5.5.3或更高2、把数据库的编码改成utf8mb4 -- UTF-8 Unicode3、然后需要存储emoji表情的字段选择utf8mb4_general_ci4、数据库连接也需要改为utf8mb4这种方式可能带来的问题:存储:在数据表中,对于变长的字段(如VARCHAR2,TEXT),utf8mb4最大可存储的字符可能少于utf8系列的collation;

    在索引中,对于文本类型的字段,utf8mb4可索引的字符少于utf8系列的collations。如InnoDB的索引最多使用767字节。

     如果使用utf8mb4,每一个字符都会预留4字节做索引,而utf8则预留3字节。故此前者是191个字符,后者是255个字符。性能:由于以上原因,加上字符集大,utf8mb4的性能可能比utf8系列的collations低,

   可以参考stackoverfolow上的一个测试结果:http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci,

    差异不是特别大。运维:如果一个大的环境内,如果其他的数据库都是utf8模式,把其中某个库设置为utf8mb4模式,在后续交接运维可能会造成问题,遗留下坑。上下游:数据库支持unicode的emoji存储,上下游不一定支持。比如mysql客户端驱动(低版本的jdbc就不行)可能不支持utf8mb4,或者DDL的中间件不支持utf8mb4。

     web端处理utf8mb4字符展示,这些都有可能影响emoji的存储活着展示。
2、使用base64编码
这种方法是可以,但是旧数据如果没有经过encode操作,取数据的时候如果统一进行decode的话,旧数据会丢失的。
3、过滤emoji表情
支持emoji表情是个麻烦的东西,有时即使能存储,也不一定能完美显示。可能会出现因emoji图片不够全而出现无法显示的情况。并且有些客户端可能还需要使用第三方类库,需要大量的emoji图片等。

因此,如果emoji不是非要不可,我们可以把带有emoji内容的数据过滤掉,达到不影响其他数据的存储。
// 过滤掉emoji表情
function filterEmoji($str)
{$str = preg_replace_callback('/./u',function (array $match) {return strlen($match[0]) >= 4 ? '' : $match[0];},$str);return $str;
}

  

4、文本转义emoji表情
/**
把用户输入的文本转义(主要针对特殊符号和emoji表情)
*/
public function userTextEncode($str){if (!is_string($str)) return $str;if (!$str || $str=='undefined') return '';$text = json_encode($str); //暴露出unicode$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){return addslashes($str[0]);},$text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。return json_decode($text);
}/**
解码上面的转义
*/
public function userTextDecode($str){$text = json_encode($str); //暴露出unicode$text = preg_replace_callback('/\\\\\\\\/i',function($str){return '\\';},$text); //将两条斜杠变成一条,其他不动return json_decode($text);
}

  

  

*推荐使用文本转义emoji表情

转载于:https://www.cnblogs.com/qhorse/p/10601433.html

PHP如何处理emoji表情存入utf8的数据库相关推荐

  1. php mysql表情符号_php + mysql 存入表情 【如何转义emoji表情,让它可以存入utf8的数据库】...

    方法1:base_encode64 这种方法是可以,但是旧数据没有经过encode操作,取数据的时候如果统一进行decode的话,旧数据会丢失的. 1 方法2:urlencode 这个似乎可以,对没有 ...

  2. mysql ud83cudf19__如何转义emoji表情,让它可以存入utf8的数据库?

    unicode emoji是4个字节的,存不进MySQL里,找到一个转义的库http://code.iamcal.com/php/emoji/,但是转为Unicode之后,还是4个字节,一样存不进,应 ...

  3. emoji mysql 转 unicode_如何转义emoji表情,让它可以存入utf8的数据库?

    unicode emoji是4个字节的,存不进MySQL里,找到一个转义的库http://code.iamcal.com/php/emoji/,但是转为Unicode之后,还是4个字节,一样存不进,应 ...

  4. mysql 表情 转义_如何转义emoji表情,让它可以存入utf8的数据库?

    unicode emoji是4个字节的,存不进MySQL里,找到一个转义的库http://code.iamcal.com/php/emoji/,但是转为Unicode之后,还是4个字节,一样存不进,应 ...

  5. 日常小结:emoji表情转换utf-8编码字符串(存入数据库)/还原表情字符(页面展示)

    直接贴上工具类 package com.epean.trade.framework.util;import java.net.URLDecoder; import java.net.URLEncode ...

  6. Mysql怎么把微信昵称(带emoji表情)保存到数据库,亲测可用

    问题描述: 如果UTF8字符集且是Java服务器的话,当存储含有emoji表情时,会抛出类似如下异常: java.sql.SQLException: Incorrect string value: ' ...

  7. 如何使用MySQL存储Emoji表情,UTF-8和UTF-8MB4字符编码有何区别?

    前言 这篇应该算个小知识吧.平时习惯在写文章的时候都喜欢用 windows的emoji表情(win+.)即可弹出,就如

  8. java如何处理emoji表情,并存入数据库

    在之前中的实时聊天的项目中遇到了移动端向pc端发送表情的时候出现乱码情况,后来总结之后java自带的java-emoji可以解决乱码并可以存入数据库中 代码如下: private static Emo ...

  9. Python3 如何处理 emoji 表情

    emoji就是表情符号,来自日语词汇"絵文字"(假名为"えもじ",读音即emoji) emoji的创造者是日本人栗田穰崇(Shigetaka Kurita),他 ...

最新文章

  1. Signal和slot的声明和连接
  2. Android RecycleView ScrollBy不生效
  3. 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串
  4. ASP.NET MVC 实现与SQLSERVER的依赖缓存
  5. 第四范式荣获2020年度信创工委会 “卓越贡献成员单位”称号
  6. java HashMap实现原理
  7. ES6的新特性(5)——数值的扩展
  8. 什么是并发与并行?有另类举例,适用于新手
  9. Maxcompute ODPS SQL 日期函数
  10. 我的时时在线电脑(千脑)
  11. robocode java_IBM Robocode Java学习利器(1)Robocode 入门
  12. 矩阵2-打印魔方矩阵(非常简单)
  13. lvds传输距离标准_lvds接口标准
  14. (CVPR-2018)仔细研究用于动作识别的时空卷积
  15. C++程序设计谭浩强 第三章(程序设计初步)习题答案(部分有改进)
  16. 洛谷 P1725 琪露诺
  17. LSH(Locality Sensitive Hashing)原理与实现
  18. cad安装日志文件发生错误_CAD 2012 安装出错,错误log文件如下,该怎么修复 在线等。...
  19. 两组数据的偏差率_GWT测试报告 篇七十五:隐患难忽视,RIVAL 3 WIRELESS精准度LOD测试...
  20. 软件设计师:06-程序设计语言与语言处理程序基础

热门文章

  1. shiro添加注解@RequiresPermissions无效
  2. 百度兴趣点下载工具设计和实现
  3. 使用VS2013在WIN8.1上运行gaclib的hello world
  4. SAP NetWeaver平台介绍
  5. Spring学习(十)Spring常见面试题汇总
  6. 【css】常用的几种水平垂直居中方式与盒子模型,面试经常问到!
  7. 【8086汇编-Day6】关于loop的实验
  8. [JSOI2008]Blue Mary的战役地图——全网唯一一篇dp题解
  9. [PY3]——内置数据结构(4)——字符串格式化(format)
  10. Java Servlet生成JSON格式数据并用jQuery显示