3种方法轻松处理php开发中emoji表情的问题

背景

做微信开发的时候就会发现,存储微信昵称必不可少。

可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了

一般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,终于找到靠谱能用的代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

// 过滤掉emoji表情

function filterEmoji($str)

{

 $str = preg_replace_callback(

   ‘/./u‘,

   function (array $match) {

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

   },

   $str);

  return $str;

 }

以上就是为大家总结的PHP微信开发中涉及到emoji表情的几种处理方法,基本思想就是遍历字符串中的每个字符,如果该字符的长度为4个字节,就将其删除。希望大家喜欢!

时间: 2024-10-12 20:58:24

3种方法轻松处理php开发中emoji表情的问题的相关文章

Magento中,调用静态块的几种方法[magento 二次开发]

在后台创建一个order_form静态块 Block Title :Order Form Identifier :order_form Status :Enabled Content :自定义内容 1.如果要在.phtml文件中直接调用这个静态块,那可以采用以下方法 [php] view plaincopy <?php $block = Mage::getModel('cms/block') ->setStoreId(Mage::app()->getStore()->getId()

轻松处理PHP开发中微信emoji表情mysql存储的问题

背景 做微信开发的时候发现,微信支持emoji表情做昵称,结果考虑不周 Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.有的根本插入是失败,原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了. 这要怎么办呢? 第一种方案: 如果你已经有很多数据了就不要修改字符集了因为会造成乱码情况你可以干掉他或者表情替换成*** $result['nickname'] = preg_repla

安卓手机无线投屏电脑 三种方法轻松搞

在手机上看视频,已经是我们现在最主流的娱乐方式.不过,长时间看小屏幕对眼睛可受不了,而且一些4K.1080P的大片还是在大屏幕上更有视觉效果.这时该怎么办呢,有没有什么办法可以将手机屏幕投射到电脑屏幕上,下面简单几步教你安卓手机无线投屏电脑.手机投屏到电脑其实主要使用的是WiFi传输,这种技术名为"Miracast".简单来说,"Miracast"就是通过"WiFi Display"认证的设备.有了这一功能后,移动端的音视频文件就可以分享到电脑上

一文让你轻松了解JAVA开发中的四种加密方法

文章目录 一.工具类 md5加密工具类 base64加密工具类 Bcrypt工具类 二.加密测试 MD5加密测试 base64加密测试 SHA加密测试 BCrypt加密测试 一.工具类 1. md5加密工具类 package 加密Tester.util; import java.security.MessageDigest; public class MD5Utils { private static final String hexDigIts[] = {"0","1&qu

三种方法实现统计一个句子中的字母数 (setdefault、defaultdict的使用)

最常见的方法,构建一个字典,对于句子中出现的字母,如果是首次出现,则值置为1,后后面再出现就加1. def letter_frequency_1(sentence): frequencies={} for letter in sentence: if letter not in frequencies: frequencies[letter]=1 else: frequencies[letter]+=1 return frequencies 对于setdefault方法,如果键在字典中,该方法的

PDF文件怎么编辑,一种方法轻松解决

PDF文件怎么编辑呢?其实很多人在使用PDF文件,但是对PDF文件了解的并不是很多,只知道PDF文件安全性高,不可以直接编辑,有的时候想要编辑PDF文件的时候也不知道从何下手,想要编辑PDF文件的时候就可以选择使用迅捷PDF编辑器,下面小编就使用PDF编辑器为大家分享一下PDF文件编辑的方法. 辅助软件:迅捷PDF编辑器 操作方法如下: 1:首先我们双击将PDF编辑器打开,打开软件后,将PDF文件添加到软件中去. 2:在软件中可以找到内容编辑工具,点击内容编辑工具就可以编辑下面的文件内容了. 3

五种方法轻松预防口臭

说到口臭,我们都非常的熟悉,身边很多的朋友都有口臭的烦恼.即使每天早晚刷牙也会出现口臭的情况,这让我们非常的尴尬,那么是哪些原因导致了口臭的发生呢?如何预防口臭呢?下面我们就为大家详细的介绍一下口臭的原因和预防方法. 导致口臭的常见因素1.口腔疾病:口腔卫生差,患有龋齿.牙龈炎.牙周炎.口腔粘膜炎以及蛀牙.牙周病等口腔疾病的人,其口腔内容易滋生细菌,尤其是厌氧菌,其分解产生出了硫化物,发出令人恶心的味道,而产生口臭. 2.胃肠道疾病:如消化性溃疡.慢性胃炎.功能性消化不良等,都可能伴有口臭.近来

男性健身方法 6种方法轻松拥有腹肌(一)

现在很多男性朋友都喜欢健身,在空余的时间会去健身房,其实男性健身养生也需要注意许多地方.男性朋友们平时都选择什么样的健身方式呢,男性健身方法要根据不同的身体情况确定!今天就带大家去看看男士健身计划www.sportq.com,怎样健康的达到健身的目的! 男人腹部力量训练健身有效方法 每个男性应该都想要拥有完美的6块腹肌吧,这是所有男性梦寐以求的!其实男性腹部健身有一些专门的方法,对于腹部肌肉的训练要持之以恒,不能有任何的松懈!只有坚持不懈的训练才能有很好的效果,下面和小编一起来看看有哪些好的锻炼

Activity 通过 Fragment保存大块数据的一种方法。摘自android开发官网

http://developer.android.com/guide/topics/resources/runtime-changes.html Retaining an Object During a Configuration Change If restarting your activity requires that you recover large sets of data, re-establish a network connection, or perform other i