最近一个朋友在调用微信接口的时候,获取到的数据保存到数据库失败了,原因是因为里面含有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表情的方法,了解更多相关文章请关注吾爱编程网!