PHP字符串中emoji表情的处理

举报
六哥 发表于 2021/09/09 14:31:44 2021/09/09
【摘要】 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 中的存储处理

  1. MySQL 中使用utf8mb4字符集;
  2. PHP 对字符串进行base64编码,从数据库中取出时再对字符串进行解码;
  3. 直接移除字符串中的emoji表情(该方法比较简单粗暴不可复原)。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。