Как конвертировать эмодзи из юникода в PHP?

Я использую это стол эмодзи и попробуйте этот код:

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

Если я попытаюсь преобразовать это \ u1F600 (улыбающееся лицо) сквозь json_decodeЯ вижу этот символ — ὠ0,

В чем дело? Как правильно получить эмодзи?

19

Решение

PHP 5

JSON-х \u может обрабатывать только одну кодовую единицу UTF-16 за раз, поэтому вместо этого вам нужно написать суррогатную пару. За U+1F600 это \uD83D\uDE00, который работает:

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

PHP 7

Вам больше не нужно использовать json_decode и может просто использовать \u и литерал Unicode:

echo "\u{1F30F}";
��
35

Другие решения

В дополнение к ответу Тино, я хотел бы добавить код для преобразования шестнадцатеричного кода, например 0x1F63C на символ Unicode в 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); выходы ��

5

По вопросам рекламы [email protected]