如何在 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,反之亦然