PHP开发丨3个简单的方法处理emoji表情

摘要:
将带有表情符号的昵称字段插入其中,整个字段将变成一个空字符串。结果表明,MySQL的utf8字符集是3个字节,而表情符号是4个字节,因此无法存储整个昵称。如果需要显示表情符号,则需要准备大量表情符号图像并使用第三方前端库。即使如此,也有可能因为表情符号图像不够完整而无法显示。在大多数业务场景中,表情符号是不必要的。

一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢?原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。这要怎么办呢?我来介绍几种方法

1、使用utf8mb4字符集

  如果你的mysql版本>=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集

  这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是最好的解决方案

  至于字节增大带来的性能损耗,我看过一些评测,几乎是可以忽略不计的

2、使用base64编码

  如果你因为某些原因无法使用utf8mb4的话,你还可以使用base64来曲线救国

  使用例如base64_encode之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时decode一下即可

3、干掉emoji表情

  emoji表情是个麻烦的东西,即使你能存储,也不一定能完美显示。在iOS以外的平台上,例如PC或者android。如果你需要显示emoji,就得准备一大堆emoji图片并使用第三方前端类库才行。即便如此,还是可能因为emoji图片不够全而出现无法显示的情况

  在大多数业务场景下,emoji也不是非要不可的。我们可以适当地考虑干掉它,节约各种成本

  经过一番苦苦的google,终于找到靠谱能用的代码:

// 过滤掉emoji表情

function filterEmoji($str)

{  

    $str = preg_replace_callback( 

              '/./u',

               function (array $match) {          

                     return strlen($match[0]) >= 4 ? '' : $match[0];

               },           

               $str);     

               

     return $str;

 }


 

  基本思想就是遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。

免责声明:文章转载自《PHP开发丨3个简单的方法处理emoji表情》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LoadRunner监控图表与配置(一) 监控与图表移动端网页巧用 margin和padding 的百分比实现自适应下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js-判断字符串中是否存在emoji表情

1 function isEmojiCharacter(substring) { 2 for(var i = 0; i < substring.length; i++) { 3 var hs = substring.charCodeAt(i); 4...

Emoji表情符号兼容方案

Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号;词义来自日语(えもじ,e-moji,moji在日语中的含义是字符)表情符号现已普遍应用于手机短信和网络聊天软件。emoji表情符号,在外国的手机短信里面已经是很流行使用的一种表情。手机上如何使用emoji:1.iphone、ipad系统:安装emoji free,再设置-通用-键盘...

PHP学习(字符串操作)

   在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" "。单引号和双引号到底有啥区别呢?  PHP允许我们在双引号串中直接包含字串变量。而单引号串中的内容总被认为是普通字符。PHP中用英文的点号.来连接两个字符串。(注意输出的区别) 1 <?php 2 $i='I'; 3 $love=' Love'; 4 $you=...

黄聪:PHP字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、切割成数组等)

一、字符串替换 str_replace("iwind", "kiki", "i love iwind, iwind said"); 将输出 "i love kiki, kiki said" str_replace(find,replace,string,count)参数 描述  find 必需。规定要查找的值。 replace 必需。规定替换 find...

Tweepy1_抓取Twitter数据

python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share...

java插入emoji表情报错

插入Emoji表情,保存到数据库时报错: Caused by: java.sql.SQLException: Incorrect string value: 'xF0x9Fx98x84' for column 'review' at row 1at com.mysql.jdbc.SQLError.createSQLException(SQLError.ja...