emoji
存 emoji.
策略是储存,网上好多说法。
- 框架数据库引擎字符集 utf8mb4。库、表、字段,这里要注意 MySQL 版本(5.6),涉及到配置文件修改、表的字符集、字段的字符集。
- 兼顾旧系统或MySQL更低版本,入、出库的时候用 base64 相关函数加、解密。
PS. base64后的存储大概会高出原始字符 30% 多,以及base64字符串后的长度不要超过字段最长显示。
不存 emoji.
策略是过滤,直接挡掉数据。不允许保存。
function removeEmojiChar($str)
{
$mbLen = mb_strlen($str);
$strArr = [];
for ($i = 0; $i < $mbLen; $i++) {
$mbSubstr = mb_substr($str, $i, 1, 'utf-8');
if (strlen($mbSubstr) >= 4) {
continue;
}
$strArr[] = $mbSubstr;
}
return implode('', $strArr);
}
特殊字符
if (json_encode($str) === false) {
echo '有特殊字符';//这个很巧妙,解决了很多事情。
}