评论

处理存储Emoji符号

Emoji符号处理方法

前述

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 $str
 * @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 $str
 * @return null|string|string[]
 */
function emoji_decode($str)
{
    $strDecode = preg_replace_callback('|\[\[EMOJI:(.*?)\]\]|', function ($matches) {
        return rawurldecode($matches[1]);
    }, $str);
    return $strDecode;
}
最后一次编辑于  11-19  
点赞 4
收藏
评论

2 个评论

  • 🐰🐏🐰
    🐰🐏🐰
    11-19

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

    11-19
    赞同 2
    回复 2
    • 小肥羊
      小肥羊
      11-20
      确实改下字符集就可以,我之前被这个问题折磨过。
      11-20
      回复
    • Last StarDust
      Last StarDust
      11-28
      我们之前也是这个问题,最后后端改一下数据库字符集就行了
      11-28
      回复
  • Hanks
    Hanks
    11-21

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

    11-21
    赞同
    回复