转换来自Web应用程序的移动应用程序的表情符号unicode

时间:2015-08-06 08:07:18

标签: php code-composer

我使用emojione来转换表情符号,但是有问题。

如果有人从手机上传了表情符号,那么就像\ ud83d \ ude0c \ ud83d \ ude0c \ ud83d \ ude0c这个unicode。

emojione没有转换此类代码。

任何人都可以帮我转换此代码或建议我使用任何其他软件包

1 个答案:

答案 0 :(得分:0)

我做了@ last。

    $str   = '\ud83d\ude0c\ud83d\ude0c\ud83d\ude0c';
    $regex = '/\\\u([dD][89abAB][\da-fA-F]{2})\\\u([dD][c-fC-F][\da-fA-F]{2})
          |\\\u([\da-fA-F]{4})/sx';
    echo preg_replace_callback($regex, function($matches) {

        if (isset($matches[3])) {
            $cp = hexdec($matches[3]);
        } else {
            $lead  = hexdec($matches[1]);
            $trail = hexdec($matches[2]);

            // http://unicode.org/faq/utf_bom.html#utf16-4
            $cp = ($lead << 10) + $trail + 0x10000 - (0xD800 << 10) - 0xDC00;
        }

        // https://tools.ietf.org/html/rfc3629#section-3
        // Characters between U+D800 and U+DFFF are not allowed in UTF-8
        if ($cp > 0xD7FF && 0xE000 > $cp) {
            $cp = 0xFFFD;
        }

        // https://github.com/php/php-src/blob/php-5.6.4/ext/standard/html.c#L471
        // php_utf32_utf8(unsigned char *buf, unsigned k)

        if ($cp < 0x80) {
            return chr($cp);
        } else if ($cp < 0xA0) {
            return chr(0xC0 | $cp >> 6) . chr(0x80 | $cp & 0x3F);
        }

        return html_entity_decode('&#' . $cp . ';');
    }, $str);

输出将是: