PHP中处理emoji表情

今天遇到评论中加入emoji表情导致整个字符存到数据库中为空的情况,出现这种情况是因为mysql数据库表用的utf-8字符集也就是3字节,但emoji表情是4字节,导致无法insert.

下面写下怎么存到数据库和怎么清除掉emoji.

PHP中将emoji表情存储到mysql数据库

  • 修改数据库字符集

  • 将对应的表字符集改为utf8mb4,排序规则改为utf8mb4_unicode_ci

  • 将对应的字段的字符集改为utf8mb4,排序规则改为utf8mb4_unicode_ci

  • 修改链接方式

    在数据库的配置文件中将charset改为utf8mb4,将collation改为utf8mb4_unicode_ci。

'mysql' => [
    'host'      => env('DB_HOST_SLAVE_ONE'), 
    'username'  => env('DB_USERNAME_SLAVE_ONE'), 
    'password'  => env('DB_PASSWORD_SLAVE_ONE'),
    'driver'    => 'mysql',   
   'database'  => env('DB_DATABASE'),    
   'charset'   => 'utf8mb4',    
  'collation' => 'utf8mb4_unicode_ci',
  'prefix'    => '',    
  'strict'    => false,],

记得重启mysql,嗯,一定要重启。

PHP将emoji从字符串中清除

步骤:

  • 将字符中原有?替换掉

  • 将字符串从utf-8转为iso-8859-1

  • 再还原回utf-8(mb_convert_encoding函数会将无效的字符转为?

  • 将这些无效的?''替换掉

  • 将最初的?还原回来

代码如下:

function removeEmojis( $string ) 
{ 
        $string = str_replace( "?", "{%}", $string ); 
        $string = mb_convert_encoding( $string, "ISO-8859-1", "UTF-8" ); 
        $string = mb_convert_encoding( $string, "UTF-8", "ISO-8859-1" ); 
        $string = str_replace( array( "?", "? ", " ?" ), array(""), $string ); 
        $string = str_replace( "{%}", "?", $string ); 
        return trim( $string );
}

验证字符串中是否含有emoji表情

还有些情况是我们直接验证,如果含有emoji表情则报格式错误,代码如下。

public function findEmoji($source){
    $mat = [];
    preg_match_all('/./u', $source,$mat);
    foreach ($mat[0] as $v){
        if(strlen($v) > 3){return true;}
    }
    return false;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容