php emoji utf8转unicode
admin
2023-06-21 13:02:03
0
/**
 * Translates a sequence of UTF-8 bytes to their equivalent unicode code points.
 * Each code point is prefixed with "\u".
 *
 * @param string $utf8
 *
 * @return string
 */function utf8_to_unicode($utf8) {
    $i = 0;
    $l = strlen($utf8);

    $out = '';

    while ($i < $l) {
        if ((ord($utf8[$i]) & 0x80) === 0x00) {
            // 0xxxxxxx
            $n = ord($utf8[$i++]);
        } elseif ((ord($utf8[$i]) & 0xE0) === 0xC0) {
            // 110xxxxx 10xxxxxx
            $n =
                ((ord($utf8[$i++]) & 0x1F) <<  6) |
                ((ord($utf8[$i++]) & 0x3F) <<  0)
            ;
        } elseif ((ord($utf8[$i]) & 0xF0) === 0xE0) {
            // 1110xxxx 10xxxxxx 10xxxxxx
            $n =
                ((ord($utf8[$i++]) & 0x0F) << 12) |
                ((ord($utf8[$i++]) & 0x3F) <<  6) |
                ((ord($utf8[$i++]) & 0x3F) <<  0)
            ;
        } elseif ((ord($utf8[$i]) & 0xF8) === 0xF0) {
            // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
            $n =
                ((ord($utf8[$i++]) & 0x07) << 18) |
                ((ord($utf8[$i++]) & 0x3F) << 12) |
                ((ord($utf8[$i++]) & 0x3F) <<  6) |
                ((ord($utf8[$i++]) & 0x3F) <<  0)
            ;
        } elseif ((ord($utf8[$i]) & 0xFC) === 0xF8) {
            // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
            $n =
                ((ord($utf8[$i++]) & 0x03) << 24) |
                ((ord($utf8[$i++]) & 0x3F) << 18) |
                ((ord($utf8[$i++]) & 0x3F) << 12) |
                ((ord($utf8[$i++]) & 0x3F) <<  6) |
                ((ord($utf8[$i++]) & 0x3F) <<  0)
            ;
        } elseif ((ord($utf8[$i]) & 0xFE) === 0xFC) {
            // 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
            $n =
                ((ord($utf8[$i++]) & 0x01) << 30) |
                ((ord($utf8[$i++]) & 0x3F) << 24) |
                ((ord($utf8[$i++]) & 0x3F) << 18) |
                ((ord($utf8[$i++]) & 0x3F) << 12) |
                ((ord($utf8[$i++]) & 0x3F) <<  6) |
                ((ord($utf8[$i++]) & 0x3F) <<  0)
            ;
        } else {
            throw new \Exception('Invalid utf-8 code point');
        }

        $n = strtoupper(dechex($n));
        $pad = strlen($n) <= 4 ? strlen($n) + strlen($n) %2 : 0;
        $n = str_pad($n, $pad, "0", STR_PAD_LEFT);

        $out .= sprintf("\u%s", $n);
    }

    return $out;}


相关内容

热门资讯

消息称LG电子就出售电视业务与... IT之家 5 月 28 日消息,韩媒 EBN 当地时间今日报道称,LG 电子 (LG Electro...
东贝取得低噪音压缩机壳体专利,... 国家知识产权局信息显示,黄石东贝压缩机有限公司取得一项名为“一种低噪音压缩机壳体及压缩机”的专利,授...
神舟二十一号和神舟二十三号航天... 人民网北京5月28日电 (记者赵竹青)据中国载人航天工程办公室消息,北京时间2026年5月28日,神...
以“智”破局!兴业银行青岛分行... 随着金融工具的高频演进,现代洗钱与欺诈行为正加速向场景化、日常化隐蔽,不法分子将异常交易深度伪装在正...
无人驾驶与面塑共趣、机器狗与点... 近日,由中共广东省委人才办、广东省人力资源和社会保障厅、广东省教育厅联合主办的“百万英才汇南粤”20...
女记者暗访非法代孕窝点遭拖拽致... 5月26日晚,大象新闻记者接到线索对杭州临平区一涉嫌非法代孕窝点进行暗访,遭不明身份人员拖拽导致骨折...
AI 手机还没度上「蜜月」,模... 本文转载自 Hardwire,欢迎关注,共同看见硬件行业新风向 👇 3 万台只是水花。水花之外,整...
超载客车追尾致13死3伤,官方... 5月28日凌晨2时40分左右,G40沪陕高速河南省南阳市桐柏毛集段突发一起客车追尾事故。一辆车牌号为...
县委书记下井督导安全,提前将打... 澎湃新闻记者 岳怀让近日,继续有多地领导干部深入井下督导安全生产工作。据湖南省娄底市新化县“新化融媒...
豫见Offer新赛道 【核心提示】毕业求职,赛道万千。乡村振兴村级协理员小时帮着家乡算起了“经济账”,大学生小谢通过培训以...