在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢? 原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。这要怎么办呢 1、使用utf8mb4字符集 2、使用base64编码 3、过滤emoji表情 // 过滤掉emoji表情 function filterEmoji($str) { $str = preg_replace_callback('/./u',function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; },$str); return $str; } 4、文本转义emoji表情 /** 把用户输入的文本转义(主要针对特殊符号和emoji表情) */ 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){ return addslashes($str[0]); },$text); //将emoji的unicode留下,其他不动,这里的正则比原答案增加了d,因为我发现我很多emoji实际上是\ud开头的,反而暂时没发现有\ue开头。 return json_decode($text); } /** 解码上面的转义 */ public function userTextDecode($str){ $text = json_encode($str); //暴露出unicode $text = preg_replace_callback('/\\\\\\\\/i',function($str){ return '\\'; },$text); //将两条斜杠变成一条,其他不动 return json_decode($text); }
|
2022-08-17
2022-11-06
2022-08-17
2022-07-29
2022-07-18
请发表评论