Я использую эту таблицу 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 с разбиением на суррогатную пару:
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);
выходы 😼