2015-11-05 6 views
16

Я использую это table of Emoji и попробовать этот код:Как преобразовать Emoji из Unicode в PHP?

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

Если я пытаюсь преобразовать этот \u1F600 (ухмыляясь лицо) через json_decode, я вижу этот символ - ὠ0.

Неправильно? Как правильно выбрать Эможи?

+2

Пробовали ли вы байты нотации? [echo "\ xF0 \ x9F \ x98 \ x80";] (https://eval.in/463740) Возможно, ваш браузер не может отобразить этот файл? –

+0

Если вы сохраните файл PHP в правильной кодировке, вы также можете просто написать 'print ('');'. – roeland

ответ

29

PHP 5

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

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

PHP 7

Теперь больше не нужно использовать json_decode и может просто использовать \u и Юникода буквального:

echo "\u{1F30F}"; 

3

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

Смежные вопросы