美文网首页
PHP中处理emoji表情

PHP中处理emoji表情

作者: 坚果牛奶 | 来源:发表于2016-11-25 19:52 被阅读678次

    今天遇到评论中加入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;
    }
    

    相关文章

      网友评论

          本文标题:PHP中处理emoji表情

          本文链接:https://www.haomeiwen.com/subject/ktjwpttx.html