处理存储Emoji符号
发布于 5 年前 作者 jing50 2567 次浏览 来自 分享

前述

Emoji是一种图形符号,在我们日常生活中越来越常见,使用微信聊天,仅仅文字已经无法承载我们丰富的感情,一条消息必须带个Emoji。对于开发者,应该如何处理和存储Emoji?

方法

MySQL数据库的字符编码一般是utf8,无法直接保存Emoji,可以通过转换,将Emoji转成字符串保存,使用的时候取出来再转成Emoji。

Java

推荐使用java-emoji-converter。

在pom.xml文件中引入jar包:

<dependency>
  <groupId>com.github.binarywang</groupId>
  <artifactId>java-emoji-converter</artifactId>
  <version>0.1.1</version>
</dependency>

主要使用2个方法:

  • toHtml() 将Emoji转成字符存储
  • toUnicode() 将字符还原展示
EmojiConverter emojiConverter = EmojiConverter.getInstance();
// 转成字符
String emojiStr = emojiConverter.toHtml(emoji);
// 字符还原
String emoji = emojiConverter.toUnicode(emojiStr);

PHP

提供2个方法

/**
 * emoji转字符串
 * [@param](/user/param) $str
 * [@return](/user/return) string
 */
function emoji_encode($str)
{
    $strEncode = '';
    $length = mb_strlen($str, 'utf-8');
    for ($i = 0; $i < $length; $i++) {
        $_tmpStr = mb_substr($str, $i, 1, 'utf-8');
        if (strlen($_tmpStr) >= 4) {
            $strEncode .= '[[EMOJI:' . rawurlencode($_tmpStr) . ']]';
        } else {
            $strEncode .= $_tmpStr;
        }
    }
    return $strEncode;
}

/**
 * emoji字符串还原
 * [@param](/user/param) $str
 * [@return](/user/return) null|string|string[]
 */
function emoji_decode($str)
{
    $strDecode = preg_replace_callback('|\[\[EMOJI:(.*?)\]\]|', function ($matches) {
        return rawurldecode($matches[1]);
    }, $str);
    return $strDecode;
}
3 回复

mysql直接改字符集成utf8mb4不就得了,需要这么麻烦嘛。。。

我把字符集改成utf8mb4,emoJi就变成四个问号了,请问是哪里的配置问题吗?

字符集utf8mb4就OK,不过代码也得转义一下

回到顶部