• 技术文章 >后端开发 >PHP问题

    如何解决php emoji mysql 错误问题

    藏色散人藏色散人2021-09-01 09:11:30原创111

    php emoji mysql错误是因为数据库不支持表情,其解决办法是:1、将字符集改为utfmb4;2、将emoji表情转义,调用时再转换回去即可。

    本文操作环境:Windows7系统、PHP7.1版本、Dell G3电脑

    如何解决php emoji mysql 错误问题?

    制作小程序时有用到把用户微信名等信息存到数据库中作为一个练习记录的参考,但是发现当微信名里面有emoji表情时,这个表情却无法存入数据库字段中。之前用的时access数据库,字段中是可以直接存入表情的。

    原因排查:

    首先:我测试了一下是不是PHP程序的原因,使用post提交带有emoji表情的内容,提交的内容是正常的,post里面的内容是有emojin表情的。

    9086f43d726e29fed8d3dd47dfb6ab10.gif

    接着:试着将这个数据插入数据库里面。成功插入数据库后,发现表情变成了?号显示。

    330cd4b85f6c1bcd2b0d571866fea5f1.png

    到这里问题基本上就明白了,就是我的数据库不支持这个表情了。

    注意!注意!注意:这是我用sql-front工具运行的结果,但是在PHP程序中运行,可能导致emoji表情后面所有的内容都无法正常存入。如:

    【“表情”标题】emoji符号在内容最开头,插入内容直接为空,

    【前面“表情”标题】插入内容为【前面】,

    emoji表情及emoji表情后面的内容全部无法正常插入。

    解决方法:

    方法一:查了网上说是改变数据库字符集编码,试着将字符集改为了utfmb4。再插入一条数据看,确实表情被存入数据库了。

    365aa13c5456740e03fb8237bd625bc4.png

    需要注意的是:但是即使改了数据库的字符集,PHP程序也得相应地更改字符集。要不然还是???。

    定义方法为:mysqli_query($conn,"SET NAMES UTF8MB4");

    4e84a74a48cc3872977c53409bf61396.png

    方法二:将emoji表情转义,调用时再转换回去。无非就是定义两个函数,一个转义,一个反转义。//emoji转义

    function en_emoji($str){
    $en_str='';
    $length=mb_strlen($str,'utf-8');
    for($i=0;$i=4){
    $en_str.=''.rawurlencode($tmp_str).'';
    }else{
    $en_str.=$tmp_str;
    }
    }
    return $en_str;
    }
    //反转义为emoji
    function de_emoji($str){
    $de_str=preg_replace_callback('|(.*?)|',function($matches){
    return rawurldecode($matches[1]);
    },$str);
    return $de_str;
    }

    使用方法也很简单,在存入数据库时对数据进行转义,读取显示时再反转义即可。

    en_emoji($str)后结果为:

    265bcc16f932281b984e08f9cf290b75.png

    读取显示时使用de_emoji($str),就可以了。

    两种解决方法比较:

    方法一:修改字符集,不仅要修改数据库,而且还要修改程序代码。但是怎么说呢,可能以后数据库都会升级为utf8mb4。

    方法二:使用函数的方法,只需要修改程序,不需要动数据库。两个函数实现了。但是存在数据库里面的内容相比就是一些乱码的感觉。而且当我在写这篇文章时发现,因为在储存数据时使用了en_emoji,所以所有的表情都变成了转义后的代码,而当我在显示文章内容时使用反转义de_emoji,这个时侯我发现我文章中本来想表现的转义后内容也被反转义了。可以看到我上面的结果表现我只能用一张图片代替了。

    结语:还是少用emoji表情吧。反正都麻烦,当然如果数据库是自己做,程序也是自己写用方法一设置utf8mb4还是比较完美的。但实话说吧,我只是在写这篇文章时用了转义函数,写完就先停用了,省得给我带来不必要的麻烦。

    推荐:《PHP视频教程

    以上就是如何解决php emoji mysql 错误问题的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php emoji mysql
    上一篇:PHP数组学习之将元素拼接为一个字符串并输出(3种方法) 下一篇:php怎么安装redis3.0扩展
    线上培训班

    相关文章推荐

    • MySQL 支持 emoji 图标存储• 如何在Laravel应用中集成使用Emoji表情• PHP处理字符中的emoji表情(判断/移除/存储)• php 怎么实现去除emoji

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网