处理存储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](/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;
}