不改数据库编码也能支持Emoji表情

看到很多的介绍都说非要数据库支持utf8mb4才能支持Emoji表情,其实用PHP的pack函数可以规避掉数据库的编码支持问题。

首先看一下编码函数:

if (!function_exists('encode_str'))
{
    function encode_str($str)
    {
        return serialize(unpack('c*', $str));
    }
}

先unpack得到一个数组,然后序列化一下,看到的大体是这样的:

a:162:{i:1;i:123;i:2;i:34;i:3;i:116;i:4;i:97;i:5;i:114;i:6;i:103;i:7;i:101;i:8;i:116;i:9;i:34;i:10;i:58;i:11;i:34;i:12;i:104;i:13;i:116;i:14;i:116;i:15;i:112;i:16;i:58;i:17;i:47;i:18;i:47;i:19;i:102;i:20;i:105;i:21;i:108;i:22;i:101;i:23;i:46;i:24;i:105;i:25;i:108;i:26;i:105;i:27;i:103;i:28;i:104;i:29;i:116;i:30;i:115;i:31;i:104;i:32;i:97;i:33;i:114;i:34;i:101;i:35;i:46;i:36;i:99;i:37;i:111;i:38;i:109;i:39;i:47;i:40;i:98;i:41;i:54;i:42;i:53;i:43;i:56;i:44;i:57;i:45;i:102;i:46;i:99;i:47;i:54;i:48;i:97;i:49;i:98;i:50;i:47;i:51;i:100;i:52;i:97;i:53;i:49;i:54;i:49;i:55;i:50;i:56;i:52;i:57;i:100;i:58;i:100;i:59;i:57;i:60;i:48;i:61;i:100;i:62;i:102;i:63;i:97;i:64;i:52;i:65;i:48;i:66;i:51;i:67;i:100;i:68;i:98;i:69;i:50;i:70;i:54;i:71;i:57;i:72;i:55;i:73;i:99;i:74;i:53;i:75;i:52;i:76;i:48;i:77;i:56;i:78;i:57;i:79;i:100;i:80;i:50;i:81;i:97;i:82;i:53;i:83;i:46;i:84;i:106;i:85;i:112;i:86;i:103;i:87;i:34;i:88;i:44;i:89;i:34;i:90;i:116;i:91;i:105;i:92;i:116;i:93;i:108;i:94;i:101;i:95;i:34;i:96;i:58;i:97;i:34;i:98;i:-16;i:99;i:-97;i:100;i:-115;i:101;i:-114;i:102;i:-16;i:103;i:-97;i:104;i:-111;i:105;i:-106;i:106;i:34;i:107;i:44;i:108;i:34;i:109;i:100;i:110;i:97;i:111;i:116;i:112;i:101;i:113;i:34;i:114;i:58;i:115;i:34;i:116;i:50;i:117;i:48;i:118;i:49;i:119;i:53;i:120;i:45;i:121;i:48;i:122;i:50;i:123;i:45;i:124;i:49;i:125;i:49;i:126;i:34;i:127;i:44;i:128;i:34;i:129;i:117;i:130;i:115;i:131;i:101;i:132;i:114;i:133;i:110;i:134;i:97;i:135;i:109;i:136;i:101;i:137;i:34;i:138;i:58;i:139;i:34;i:140;i:-24;i:141;i:-81;i:142;i:-73;i:143;i:-27;i:144;i:-113;i:145;i:-85;i:146;i:-26;i:147;i:-120;i:148;i:-111;i:149;i:-24;i:150;i:-115;i:151;i:-119;i:152;i:-28;i:153;i:-72;i:154;i:-127;i:155;i:-27;i:156;i:-92;i:157;i:-89;i:158;i:-28;i:159;i:-70;i:160;i:-70;i:161;i:34;i:162;i:125;}

哎呀呀呀好长一串,但是大家会发现都是一些数字字母等等,任意的数据库编码都能支持,然后就到了解码的时候了。下面看一下解码函数,

if (!function_exists('decode_str'))
{
    function decode_str($str)
    {
        $ds = unserialize($str);
        if (!$ds) {
            return false;
        }
        $ret = '';
        $len = count($ds);
        for ($i=1; $i <= $len; $i++) {
            $ret .= pack('c*', $ds[$i]);
        }
        return $ret;
    }
}

这样又把输入的字符串还原啦,包括其中的表情。

下面贴张我测试的效果吧,希望对大家有帮助。

  1. 高仿奢侈品ﯹ
    ManoloBlahnik(梦琪蒂)
    Baldiinini(巴尔帝尼)
    Tory Burch(托里●伯奇)
    Ermenegildo Zegna(杰尼亚)
    MONIKA CHIAHG(莫妮卡)
    ahuo.ml