本站停止维护,已转移至laravel学习网;欢迎大家移步访问!

php转义emoji表情,让其可以存入utf8的数据库,解决存储通讯录或者聊天记录数据丢失问题!

最近我在后端处理APP传过来的通讯录时,发现部分数据丢失,毫无规律,我当时就蒙蔽了,这是为啥?后来我把所有提交过来的的通讯录写了一份txt文档,发现是emoji导致的数据丢失,以前没注意,原来emoji还会导致这个问题啊,所以记录一下,方便以后查阅:

一. 有人说把数据库的编码改成utf8mb4 -- UTF-8 Unicode,但是我觉得这种方法不可取,各种改配置

我的解决办法:

<?php
function utf8_to_unicode_str($utf8)
{
    $return = '';

    for ($i = 0; $i < mb_strlen($utf8); $i++) {

        $char = mb_substr($utf8, $i, 1);

        // 3字节是汉字,不转换,4字节才是 emoji
        if (strlen($char) > 3) {
            $char = trim(json_encode($char), '"');
        }
        $return .= $char;
    }
    return $return;
}

$t = '我爱吃/特殊符号/啦!';

var_dump(utf8_to_unicode_str($t));

输出

string(75) "我爱吃\ud83d\udc11\ud83d\udc02\ud83d\udc37\ud83c\udf4e\ud83e\udd54啦!"

这样,就算以后有丧心病狂的5字节甚至更长的UTF-8字符都能应付


转载请注明 :一沙网络原文出处:http://bbs.earnp.com/article/387
问题交流群 :562864481
1
打赏
发布时间 :2017-06-02 09:58:04
分享

0 个评论

    还没有评论,感觉来抢沙发吧!

要回复文章请先登录注册