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

Posted

技术标签:

【中文标题】如何在 PHP 中从 Unicode 转换表情符号?【英文标题】:How to convert Emoji from Unicode in PHP? 【发布时间】:2016-02-06 10:41:36 【问题描述】:

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

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

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

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

【问题讨论】:

你试过字节表示法吗? echo "\xF0\x9F\x98\x80";可能你的浏览器不能显示这个? 如果您以正确的编码保存 PHP 文件,您也可以只写 print('????'); 如果您的问题与使用 mysql 时如何将它们保存在数据库中有关,您可以将图表集更改为 utfbm4。看看here。 【参考方案1】:

PHP 5

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

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

PHP 7

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

echo "\u1F30F";
?

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于如何在 PHP 中从 Unicode 转换表情符号?的主要内容,如果未能解决你的问题,请参考以下文章

在python 3中将表情符号转换为Unicode,反之亦然

表情符号的 Python unicode 字符转换

如何在文本视图中通过 unicode 设置表情符号?

从 Unicode 字符串中正确提取表情符号

如何将4字节utf-8的emoji表情转换为unicode字符编码

如何从字符串中删除表情符号字符?