web-dev-qa-db-fra.com

Comment convertir Emoji d'Unicode en PHP?

J'utilise ceci table d'Emoji et j'essaye ce code:

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

Si j'essaye de convertir ceci \ u1F6 (visage souriant) par json_decode, Je vois ce symbole - ὠ0.

Qu'est-ce qui ne va pas? Comment obtenir un bon Emoji?

20
Platon

PHP 5

\u De JSON ne peut gérer qu'une seule unité de code UTF-16 à la fois, vous devez donc écrire la paire de substitution à la place. Pour U+1F600 c'est \uD83D\uDE00, Qui fonctionne:

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

PHP 7

Vous n'avez plus besoin d'utiliser json_decode Et vous pouvez simplement utiliser le \u Et le littéral unicode:

echo "\u{1F30F}";
????
37
Tino Didriksen

En plus de la réponse de Tino, je voudrais ajouter du code pour convertir le code hexadécimal comme 0x1F63C En un symbole unicode en PHP5 avec le diviser en une paire de substitution:

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); sorties ????

5
shukshin.ivan