MYSQL 写入emoji表情字符处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL 写入emoji表情字符处理相关的知识,希望对你有一定的参考价值。
这个鬼emoji表情是4个字节,mysql使用的utf8编码,UTF8占3个字节,要存储那个emoji表情需要将mysql编码由UFT8改为UFT8的超集,utf8mb4;
改数据库编码容易引起大面的乱码灾难。所以当遇到emoji字符表情的时候做特殊处理。网上也有很多处理方案,最后找到了一个贴上地址和代码:https://github.com/BriquzStudio/php-emoji ,多谢
class Emoji { /** * Encode emoji in text * @param string $text text to encode */ public static function Encode($text) { return self::convertEmoji($text,"ENCODE"); } /** * Decode emoji in text * @param string $text text to decode */ public static function Decode($text) { return self::convertEmoji($text,"DECODE"); } private static function convertEmoji($text,$op) { if($op=="ENCODE"){ return preg_replace_callback(‘/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{1F000}-\x{1FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F9FF}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F9FF}][\x{1F000}-\x{1FEFF}]?/u‘,array(‘self‘,"encodeEmoji"),$text); }else{ return preg_replace_callback(‘/(\\\u[0-9a-f]{4})+/‘,array(‘self‘,"decodeEmoji"),$text); } } private static function encodeEmoji($match) { return str_replace(array(‘[‘,‘]‘,‘"‘),‘‘,json_encode($match)); } private static function decodeEmoji($text) { if(!$text) return ‘‘; $text = $text[0]; $decode = json_decode($text,true); if($decode) return $decode; $text = ‘["‘ . $text . ‘"]‘; $decode = json_decode($text); if(count($decode) == 1){ return $decode[0]; } return $text; } }
$nickName = Emoji::Decode($userinfo[‘nickname‘]);
$realName = empty($nickName) ? ‘微信用户:‘ . time() : $nickName;
以上是关于MYSQL 写入emoji表情字符处理的主要内容,如果未能解决你的问题,请参考以下文章