PHP字符串中emoji表情的处理
【摘要】 PHP存储emoji表情和读取emoji表情的问题
utf-8 编码下,一个中文占用3个字节,而 emoji 或者一些特殊字符占用4个字节,我们可以用这个作为判断字符串是否包含 emoji 。
1、判断emoji函数
/**
* 是否有表情符号
* @param $str
* @return bool
*/
public function have_emoji($str)
{
$mbLen = mb_strlen($str);
$strArr = [];
$flag = false;
for ($i = 0; $i < $mbLen; $i++) {
$strArr[] = mb_substr($str, $i, 1, 'utf-8');
if (strlen($strArr[$i]) >= 4) {
$flag = true;
break;
}
}
return $flag;
}
2、emoji过滤函数;
/**
* 过滤emoji
* @param $str
* @return string
*/
public function filter_emoji($str)
{
$mbLen = mb_strlen($str);
$strArr = [];
for ($i = 0; $i < $mbLen; $i++) {
$mbSubstr = mb_substr($str, $i, 1, 'utf-8');
if (strlen($mbSubstr) >= 4) {
continue;
}
$strArr[] = $mbSubstr;
}
return implode('', $strArr);
}
3、emoji 编码函数
/*
* emoji编码函数
* @author E
*/
function user_text_encode($str){
if(!is_string($str))
return $str;
if(!$str || $str=='undefined')
return '';
$text = json_encode($str);
$text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i",function($str){
return addslashes($str[0]);
},$text);
return json_decode($text);
}
4、emoji 解码函数
/*
* emoji解码函数
* @author E
*/
function user_text_decode($str){
$text = json_encode($str);
$text = preg_replace_callback('/\\\\\\\\/i', function ($str) {
return '\\';
}, $text);
return json_decode($text);
}
二、含有 emoji 表情的字符串在mysql 中的存储处理
- MySQL 中使用utf8mb4字符集;
- PHP 对字符串进行base64编码,从数据库中取出时再对字符串进行解码;
- 直接移除字符串中的emoji表情(该方法比较简单粗暴不可复原)。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)