当前位置:首页 > PHP教程 >

php保存emoji表情

发布时间:2020-04-15 09:50:47 作者:佚名 阅读:(15)

最近一个朋友在调用微信接口的时候,获取到的数据保存到数据库失败了,原因是因为里面含有emoji表情,接下来吾爱编程为大家介绍一下关于php保存emoji表情的方法,有需要的小伙伴可以参考一下:

1、保存失败的原因:

    正常设计数据库的时候编码我们一般设置的是utf8格式的,utf8格式的字符集是3个字节,而emoji表情的字符集对应的是4个字节的,所以会保存失败。

2、解决方法:

    (1)、更改数据库的编码格式:

        数据库的编码改成utf8mb4,然后需要存储emoji表情的字段选择utf8mb4_general_ci。

        ps:不建议使用这种处理方法,因为更改了编码格式会有一系列的问题,比如utf8mb4的性能可能比utf8系列的collations低,在索引中,对于文本类型的字段,utf8mb4可索引的字符少于utf8系列的collations。

    (2)、使用base64编码:

        使用base64编码的时候,一定要保证之前的数据也做了相应的转码,不然会导致数据丢失。

    (3)、emoji表情转义:

<?php
/**
 *把用户输入的文本转义(主要针对特殊符号和emoji表情)
 *将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。
 */
public function userTextEncode($str) {
 if(!is_string($str)) return $str;
 if(!$str || $str == 'undefined') return '';
   $text = json_encode($str); //暴露出unicode
   $text = preg_replace_callback("/(\\\u[ed][0-9a-f]{3})/i", function ($str) {
    returnaddslashes($str[0]);
 }, $text); 
 returnjson_decode($text);
}
/**
 *解码上面的转义
 *将两条斜杠变成一条,其他不动
 */
public function userTextDecode($str) {
  $text = json_encode($str);
  $text = preg_replace_callback('/\\\\\\\\/i', function ($str) {
   return'\\';
  }, $text); 
     returnjson_decode($text);
    }
    turnjson_decode($text);
}

以上就是吾爱编程为大家介绍的关于php保存emoji表情的方法,了解更多相关文章请关注吾爱编程网!

欢迎分享转载→ php保存emoji表情

© 2015-2019 - 吾爱编程网 版权所有 苏ICP备18033726号-1关于我们 - 网站声明 - 联系我们