如何从 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);
输出
我使用这个 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);
输出