转:https://blog.csdn.net/qq_33679504/article/details/80459605
APP开发时,遇到用户填写评论的情况,有些用户会输入emoji表情。开发微信登录的时候,有些用户的头像也是emoji表情。此时直接存入数据库,页面会无法显示。那么怎么让页面显示呢?
一共有两种办法,推荐第一种
方法一:①MySQL数据库改的字符集改成utf8mb4编码,②数据表改成utf8mb4编码,③框架里的配置编码也改成utf8mb4。
一、存储昵称的字符集改成utf8mb4
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/71fc054360c3fd1e421367764ec33ea3.png)
二、数据表改成utf8mb4编码
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/07b554ecbe919f658049367740aac273.png)
三、框架里的配置编码也改成utf8mb4(以Thinkphp框架为例)
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/6cf7927e6d7ac6d66b0e54d91c152193.png)
方法二:存进数据库用urlencode存,取的时候用urldecode取,再返回给前端
要点:一、存进数据库时,用 urlencode 存,取的时候,用 urldecode 返回给前端
二、为避免全部文字都用urlencode存进数据库,字段太长导致数据错乱,所以做个细节处理,只有碰到emoji表情才使用urlencode,中文和英文不使用urlencode
代码开始
$remark = '[表情][表情][表情][表情][表情][表情]哈哈哈哈'; // 用户发布的评论
$str = ''; //
// 3字节是汉字,不转换,4字节才是 emoji
for ($i = 0; $i < mb_strlen($remark); $i++) {
$char = mb_substr($get['remark'], $i, 1);
if (strlen($char) > 3) {
$char = urlencode($char);
}
$str .= $char;
}
取出的时候,记得用urldecode转换一下,即可。
$res = mysql -> query('SELECT remark FROM user_remark');
$remark = urldecode($res[0]['remark']);
页面最终打印效果