如何在PHP中从Unicode转换表情符号?

时间:2015-11-05 14:32:52

标签: php unicode emoji

我使用此table of Emoji并尝试此代码:

<?php print json_decode('"\u2600"'); // This convert to ☀ (black sun with rays) ?>

如果我尝试将此\u1F600(咧嘴笑的脸)转换为json_decode,我会看到此符号 - ὠ0

什么错了?如何正确的表情符号?

2 个答案:

答案 0 :(得分:37)

PHP 5

JSON的\u一次只能处理一个UTF-16代码单元,因此您需要编写代理对。对于U+1F600,这是\uD83D\uDE00,有效:

echo json_decode('"\uD83D\uDE00"');

PHP 7

您现在不再需要使用json_decode,只需使用\u和unicode文字:

echo "\u{1F30F}";

答案 1 :(得分:5)

除了Tino的答案之外,我还想添加代码以将像0x1F63C这样的十六进制代码转换为 PHP5 中的unicode符号,并将其拆分为代理对:

function codeToSymbol($em) {
    if($em > 0x10000) {
        $first = (($em - 0x10000) >> 10) + 0xD800;
        $second = (($em - 0x10000) % 0x400) + 0xDC00;
        return json_decode('"' . sprintf("\\u%X\\u%X", $first, $second) . '"');
    } else {
        return json_decode('"' . sprintf("\\u%X", $em) . '"');
    }
}

echo codeToSymbol(0x1F63C);输出