php 表情处理,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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值