博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】在 IOS,Android 手机中是很多时候是自带 emoji 表情的,而在我们网站上有很多评论区、留言区中,若用户在移动端提交了 emoji 表情,而网站并没有对输入框中的 emoji 表情进行相应的处理,则无法将该留言或评论保存到 mysql 数据库中,造成对网站的影响不好,本文讲述一下在输入框中处理 emoji 表情的通常使用的三种方法。
首先说明一下为什么 emoji 表情无法保存到 mysql 数据库中,原因是:emoji 表情是 4 个字节的,而 mysql 的 utf8 编码最多 3 个字节,所有数据无法保存。
以下以 PHP 语言通过代码示例讲述三种处理方法:
方法一,将字符串中的 emoji 特殊内容删除,即通过过滤函数,过滤掉 emoji 字符。PHP 过滤函数代码如下【完整且正确版本】:
function filterEmoji($str)
{
$str = preg_replace_callback(
'/./u',
function(array $match){
return strlen($match[0]) >= 4 ? '': $match[0];
},
$str
);
return $str;
}
方法二,将带有 emoji 特殊字符的数据使用 base64_encode() 加密后再存储至 mysql 数据库中,输出显示的时候则使用 base64_decode() 解析一下即可。这种方法可以保持 emoji 表情依旧存在,不影响用户体验。示例为部分代码,如下:
$str = "含有 emoji 表情的字符串";
$c = base64_encode(htmlspecialchars($str)); // base64 加密
$sql = 'insert into test(content) value("'.$c.'")';
$query = mysqli_query($link,$sql); // 输入数据库中
// 查询表中的数据
$sql = "SELECT * FROM test";
$query = mysqli_query($link,$sql);
while($row = mysqli_fetch_assoc($query))
{
// 将 emoji 表情和文字显示输出
echo base64_decode($row['content']).'<br />';
}
方法三,修改 mysql 数据库的字符集编码为 utf8mb4,可以直接将 emoji 表情插入数据库中。要求 mysql 版本 >= 5.5.3,这种 4 个字节的 utf8 编码可以完美兼容 3 字节的 utf8 字符集,即 utf8 -> utf8mb4。修改数据库字符集如下:
需要更改数据库及表的字符集,必要是也可以改字段的字符集。
1). 更改数据库编码:
ALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
2). 更改表编码:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改字段 column 的字符集:
ALTER TABLE 表名 CHANGE 字段名 字段名 该字段原来的数据类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
查看表字符集是否已改:
show create table 表名
3). 最后且最重要的一步,连接数据库时设置的字符集为 utf8mb4,即在 PHP 连接数据库时,需设置:
$sql = 'set names utf8mb4';
$query = mysqli_query($link,$sql);
这种方法将 emoji 表情存到数据库后可以直接使用 sql 语句查询数据,将 emoji 表情直接显示在页面中。
本文到此主要内容已经结束,另外给个小 tip 就是 emoji 表情在 PC 端、IOS 端、Android 端同一个表情是显示出来是不同的哦。
版权归 马富天PHP博客 所有
本文标题:《在留言或评论区开发中 emoji 表情的处理三种方法》
本文链接地址:http://www.mafutian.net/369.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩2
评论审核未开启 |