1、问题&原因:
问题:微信用户昵称带有表情保存到数据库中报错:SQLException: Incorrect string value: ‘\xF0\x9F\x91\xA7’ for colum n ‘nickname’ at row 1
原因:数据库编码不对utf8无法支持该格式(字节数原因)
2、解决方式(两种)
1)、把utf8改成utf8mb4即可(友好性差)
2)、转码(麻烦)
/**
* 加密
*/
function emoji_encode($str){
$str_encode = '';
$length = mb_strlen($str,'utf-8');
for($i=0;$i<$length;$i++){
$_tmp_str = mb_substr($str,$i,1,'utf-8');
if(strlen($_tmp_str) >= 4){
$str_encode .= '[[EMOJI:' . rawurlencode($_tmp_str) . ']]';
}else{
$str_encode .= $_tmp_str;
}
}
return $str_encode;
}
/**
* 解密
*/
function emoji_decode($str){
$str_decode = preg_replace_callback('|\[EMOJI:(.*?)\]\]|', function($matches){
return rawurldecode($matches[1]);
},$str);
return $str_decode;
}