php+mysql存储emoji表情

本文详细记录了在PHP和MySQL环境下处理Emoji表情遇到的问题及解决方案。从理解Emoji编码、更改MySQL字符集、WordPress处理方式到NCR与HTML Entities编码方式的探讨,最终提出了解决存储和显示Emoji乱码的策略,包括自定义的wp_decode_emoji函数,适用于安卓端解码。文章还提供了相关参考资料。
摘要由CSDN通过智能技术生成


背景介绍:

    使用php+mysql存储app的用户数据,在存储emoji表情时发现存储遇到“????”乱码;

当前mysql版本为5.3;

踩坑过程:

1、首先是理解emoji表情:emoji表情详情请百科,关于emoji的几种编码方案,参考http://code.iamcal.com/php/emoji/,并且使用了github上的emoji-php也没能解决;

2、网上查到utf8_general_ci最大支持3字节,而emoji是4个字节存储,所以先将mysql表的字段和表从utf8改成utf8mb4,还是显示“????”乱码;

3、后来查到mysql字符集设置的问题,参考http://www.cnblogs.com/discuss/articles/1862248.html,将mysql character_set_client(客户端来源数据子使用的字符集) character_set_results(查询结果字符集) character_set_connection(连接层字符集)从utf8改成utf8mb4 ,还是显示“????”乱码;

4、因为app使用的mysql接口是wordpress的接口,发现wordpress网页端存储和显示emoji表情是正常的,因此调研了wordpress存储emoji表情的方法,发现mysql仍然使用了utf8编码方式,然后存储emoji表情时进行了编码;

5、接下来就是考虑emoji表情的编码方案,源码如下,参考https://zh.wpseek.com/function/wp_encode_emoji/:

<pre class="php hljs " style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 13px; padding: 10px; margin-top: 0px; margin-bottom: 0px; line-height: 1.42857; word-break: break-all; word-wrap: break-word; color: rgb(34, 34, 34); border: 0px; border-radius: 4px; outline: 0px; vertical-align: baseline; clear: left; background: rgb(246, 246, 246);"><span class="hljs-function" style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background: transparent;"><span class="hljs-keyword" style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(133, 153, 0); background: transparent;">function</span> <span class="hljs-title" style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(38, 139, 210); background: transparent;">wp_encode_emoji</span><span class="hljs-params" style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; background: transparent;">( <span class="hljs-variable" style="box-sizing: border-box; margin: 0px; padding
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值