Php处理输入法表情,php开发中手机输入法自带的表情、emoji表情、微信表情不显示问题,以及过虑emoji表情方法!...

【温馨提示】源码包解压密码:www.youhutong.com

php开发中手机输入法自带的表情、emoji表情、微信表情不显示问题,以及过虑emoji表情方法!

背景

做微信开发的时候就会发现,存储微信昵称必不可少。

可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了

一般Mysql表设计时,都是用UTF8字符集的。把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串。这是怎么回事呢?

原来是因为Mysql的utf8字符集是3字节的,而emoji是4字节,这样整个昵称就无法存储了。这要怎么办呢?我来介绍几种方法

解决方案

1、使用utf8mb4字符集,来让emoji正常存储、正常显示。

如果你的mysql版本>=5.5.3,你大可直接将utf8直接升级为utf8mb4字符集

这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoji表情,是最好的解决方案

至于字节增大带来的性能损耗,我看过一些评测,几乎是可以忽略不计的

2、使用base64编码,来让emoji正常存储、正常显示。

如果你因为某些原因无法使用utf8mb4的话,你还可以使用base64来曲线救国

使用例如base64_encode之类的函数编码过后的emoji可以直接存储在utf8字节集的数据表中,取出时decode一下即可

3、过虑掉emoji表情

emoji表情是个麻烦的东西,即使你能存储,也不一定能完美显示。在iOS以外的平台上,例如PC或者android。如果你需要显示emoji,就得准备一大堆emoji图片并使用第三方前端类库才行。即便如此,还是可能因为emoji图片不够全而出现无法显示的情况在大多数业务场景下,emoji也不是非要不可的。我们可以适当地考虑干掉它,节约各种成本

方法一源码:/**

* 过滤emoji表情

* @param string   $str 字符串

* @return string

*/

function filterEmoji($str)

{

if(empty($str)) return null;

$str = preg_replace_callback(

'/[\xf0-\xf7].{3}/',

function($r){

return '@E' . base64_encode($r[0]);

},$str);

$countt=substr_count($str,"@");

for ($i=0; $i 

$c = stripos($str,"@");

$str=substr($str,0,$c).substr($str,$c+10,strlen($str)-1);

}

$str = preg_replace_callback(

'/@E(.{6}==)/',

function($r){

return base64_decode($r[1]);

}, $str);

return $str;

}

方法二源码:(完美过虑)/**

* 过滤emoji表情

* @param string   $str 字符串

* @return string

*/

function filterEmoji($str, $rep = ''){

$emoji = include(APP_PATH.'/emoji.php');

$str = str_ireplace(array_keys($emoji), strCode16($rep), strCode16($str));

$str = str_replace("\\x", "%", $str);

return urldecode($str);

}

/**

* 转换为16进制

* @param  $str

*/

function strCode16($str){

$str=urlencode($str);

$str=str_replace("%", "\\x", $str);

return $str;

}

以上方法二中用到的emoji.php就不贴出来了(内容太多,但就是一个数组),需要的可以点击底部的下载!

urlencode就是查看emoji表情的urlencode后的编码。其实Emoji.php文件里收录的就是所有emoji表情的urlencode编码

浏览器启用弹出窗口过滤功能,将无法跳转到下载页。在浏览器地址栏右边符号提示处点击允许就可以了!

【温馨提示】源码包解压密码:www.youhutong.com

郑重声明:

1、本站源码仅供个人学习研究和交流使用,请于下载后二十四小时内删除

2、本站大多资源来源于互联网、用户分享,仅供学习交流使用,本站不提供任何技术支持

3、本站联系方式Email:admin@youhutong.com ,收到邮件会第一时间处理。

4、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值