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

How to convert Emoji from Unicode in PHP?

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

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

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

怎么了?如何获得正确的表情符号?

PHP 5

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

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

PHP 7

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

echo "\u{1F30F}";

除了 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); 输出