【温馨提示】源码包解压密码: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、如侵犯到任何版权问题,请立即告知本站(立即在线告知),本站将及时删除并致以最深的歉意

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

  1. android edittext 输入法表情,Android开发中EditText禁止输入Emoji表情符

    在开发中可能多处会用到过滤Emoji表情符,一般情况下,我们会通过EditText的addTextChangedListener()监听来过滤Emoji表情,但在实际开发中会遇到多个EditText, ...

  2. linux服务器输入法,如何在linux中安装输入法

    如何在linux中安装输入法 发布时间:2020-07-03 09:26:32 来源:亿速云 阅读:148 作者:Leah 如何在linux中安装输入法?很多新手对此不是很清楚,为了帮助大家解决这个难 ...

  3. 前端开发中使用mac自带apache服务

    场景 前端开发中,总是会有这样的需求,就是快速的写一个脚本,或者一个简单的demo页面.这时,我们需要马上可以启动一个web服务,来支持开发. 我们可以安装一个全局的cli工具,通过node服务来满足 ...

  4. 移动端h5开发,华为手机输入法键盘影响页面布局的问题。

    在做移动端h5的时候,有些简单的页面,我们一般都会给body写上: width:100%; height:100%; 然后给一个满屏的背景图,简单方便的适应不同屏幕的手机. 有时候为了采集用户信息,页 ...

  5. Android开发中 手机发热原因分析

    相信大家都还记得前不久"台湾少女长时间用手机打电话后,面部被轻微烫伤"的微博吧,我们随之会有疑问,打个电话为什么会产生如此高的温度?其实这是某些安卓app软件所造成的.这些&quo ...

  6. Android开发中手机存储路径问题

    安卓手机文件夹storage/emulated下面有两个文件夹0和legacy? 它们里面的文件是一模一样的,都跟主界面 的文档点开来是一样的,那 0 和 legacy两个文件夹是什么关系,为什么?里 ...

  7. Vue开发中有着原声app效果的滚动的第三方插件better-scroll在github的上面的运用方法及地址

    https://github.com/ustbhuangyi/better-scroll 以上是github地址 better-scroll    中文文档 What is better-scroll ...

  8. 百度手机输入法android v4.0,百度手机输入法Android v4.0“水墨”登场

    访问购买页面: 新版亮点: 1.    笔墨叠写,边写边出字 支持整句叠写,边写边出字,识别速度大幅提升,整句手写一气呵成 独特笔锋效果,全面美化你的字迹,写出苍劲有力的笔墨字体,人人都是书法家 2. ...

  9. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果...

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的&qu ...

  10. ios浏览器微信支付回调页面_微信支付:手机系统自带的浏览器,调用微信支付如何实现(非扫码)...

    如果您是使用浏览器的移动网页进行支付,那就是调用微信H5支付,如果是使用APP客户端进行支付,那就要调用微信APP支付. H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使 ...

最新文章

  1. Ping命令 参数介绍!
  2. KMP算法的Next数组详解(转)
  3. EF 关系规则(一对一、一对多、多对多...)
  4. WP广告平台的前世今生
  5. 流之过滤器流(将过滤器串链在一起)
  6. 7-95 倒数第N个字符串 (15 分)
  7. transformer中attention计算方式_Transformer在推荐模型中的应用总结
  8. spring中bean属性scope
  9. 文献笔记(5)(2017ISSCC 14.1)
  10. 视频 Docker 学习(高级篇)
  11. 怎样将手机屏幕投射到电脑
  12. 用代码实现通过人人网的登录
  13. mac录屏快捷键 - mac截图截屏快捷键 - 自带录屏软件QuickTime Player如何使用
  14. HTML + CSS + JavaScript速成
  15. Maya mental ray 焦散
  16. tsv文件导入mysql
  17. android时间控件
  18. ue4 改变枢轴位置_[UE4蓝图][Materials]虚幻4中可互动的雪地材质完整实现(一)
  19. 1. Java是编译型语言还是解释型语言?
  20. 投资学 | 投资日记(3)

热门文章

  1. 高通sensor core培训笔记
  2. 历经18年胡培松创制优良新种质 国稻种芯百团计划行动
  3. (批处理)如何通过Python或批处理指令删除指定文件夹?
  4. QQ2013的PC版协议,0825包和0826的数据分析
  5. u盘扩容盘用什么软件测试,扩容盘,小编教你如何检测U盘是否为扩容盘
  6. 如何用od去手动脱壳
  7. C++多线程 - 无锁编程
  8. 对称加密与非对称加密算法
  9. mysql数据库的流水号生成,数据库流水号生成解决方案
  10. 计算机上的24点游戏怎么玩,掌握基本规律,轻松玩转24点游戏