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

新手上路,请多包涵

我使用这张 表情符号表 并尝试以下代码:

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

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

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

原文由 Platon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 765
2 个回答

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 Didriksen 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 shukshin.ivan 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏