用户昵称含emoji表情保存到数据库中报错SQLException: Incorrect string value: ‘\xF0\x9F\x91\xA7’ for colum n ...
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; }
版权声明:本文由“憨小猪”发布,如需转载请注明出处。