安卓unicode输入法php过滤表单输⼊的emoji表情
1.过滤emoji表情的原因
在我们的项⽬开发中,emoji表情是个⿇烦的东西,即使我们可以能存储,也不⼀定能完美显⽰,因为它的更新速度很快:在iOS以外的平台上,例如PC或者android。如果你需要显⽰emoji,就得准备⼀⼤堆emoji图⽚并使⽤第三⽅前端类库才⾏。即便如此,还是可能因为emoji图⽚不够全⽽出现⽆法显⽰的情况
在⼤多数业务场景下,emoji也不是⾮要不可的。我们可以适当地考虑⼲掉它,节约各种成本。
2.php过滤emoji原理
Emoji (絵⽂字,词义来⾃⽇语えもじ,e-moji,moji在⽇语中的含义是字符)是⼀套起源于⽇本的12x12像素表情符号,由栗⽥穣崇(Shigetaka Kurit)创作,最早在⽇本⽹络及⼿机⽤户中流⾏。⾃苹果公司发布的iOS 5输⼊法中加⼊了emoji后,这种表情符号开始席卷全球,⽬前emoji已被⼤多数现代计算机系统所兼容的Unicode编码采纳,普遍应⽤于各种⼿机短信和社交⽹络中。近期,更是有不少⽹友⽤emoji图案玩猜字游戏,享受这种表情⽂化带来的乐趣。
关于emoji的发⾳:很多⼈第⼀眼见到emoji便会下意识将其误读作“⼀磨叽”,其实不然,emoji⾳译过来⼤概读作“诶磨叽”,当中“e”的发⾳颇似字母abc的a的发⾳。
最初⽇本的三⼤电信运营商各⾃有不同的字符定义,分别是DoCoMo、KDDI和Softbank。随着iOS内置了Softbank的版本,emoji在全球范围内风靡(iOS5版本以前)。⽽Google⼜⾃⼰定义了⼀套emoji字符。iOS5以后,apple采⽤了unicode定义的emoji字符(iOS5版本以后)。
unicode定义的emoji是四个字符,softbank为3个字符,emoji的四个字符从存储到展⽰对应没有做过考虑的系统来说,简直就是灾难。
3.针对unicode定义的emoji表情过滤
①.unicode定义的emoji是四个字符,根据这个原理进⾏过滤
// 过滤掉emoji表情
function filter_Emoji($str)
{
$str = preg_replace_callback( //执⾏⼀个正则表达式搜索并且使⽤⼀个回调进⾏替换
'/./u',
function (array$match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
},
$str);
return$str;
}
②. unicode emoji是4个字节,softbank定义的emoji占⽤3个字节存储,通过emoji for php ,我们可以把unicode的emoji⽅式转换为softbank⽅式,从⽽实现不修改数据库,就能存储emoji,相对于数据库层⾯的解决问题的⽅式,动作要⼩的多,并且也不会有性能,运维等⽅⾯的问题。但是有个不可避免的问题是,Softbank⽅式已经不再维护,所以新增加的emoji表情,Softbank中都没有,会造成部分emoji表情丢失的情况,对于这种情况不推荐使⽤。
后续还有⼀些⽅法没有亲⾃实践过,但是给⼤家提供出来。
1、使⽤utf8mb4字符集
如果你的mysql版本>=5.5.3,你可以尝试直接将utf8直接升级为utf8mb4字符集
这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是较好的解决⽅案之⼀。 ⾄于字节增⼤带来的性能损耗,根据⾃⼰的项⽬,⾃⼰估算吧....
2、使⽤base64编码
如果你因为某些原因⽆法使⽤utf8mb4字符集的话,你还可以使⽤base64来曲线救国
使⽤例如base64_encode之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时decode⼀下即可
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论