How to convert Emoji from Unicode in PHP?
Asked Answered
S

3

28

I use this table of Emoji and try this code:

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

If I try to convert this \u1F600 (grinning face) through json_decode, I see this symbol — ὠ0.

Whats wrong? How to get right Emoji?

Shanghai answered 5/11, 2015 at 14:32 Comment(3)
Did you try the bytes notation? echo "\xF0\x9F\x98\x80"; Maybe your browser can't display this one?Syrian
If you save the PHP file in the correct encoding you can also just write print('😀');.Frontpage
If you problem is related to how to save them in database if you are using MySQL you can change the chartset to utfbm4. Take a look to here.Pappus
K
59

PHP 5

JSON's \u can only handle one UTF-16 code unit at a time, so you need to write the surrogate pair instead. For U+1F600 this is \uD83D\uDE00, which works:

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

PHP 7

You now no longer need to use json_decode and can just use the \u and the unicode literal:

echo "\u{1F30F}";
🌏
Kunkle answered 5/11, 2015 at 15:23 Comment(0)
E
7

In addition to the answer of Tino, I'd like to add code to convert hexadecimal code like 0x1F63C to a unicode symbol in PHP5 with splitting it to a surrogate pair:

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); outputs 😼

Erichericha answered 3/4, 2017 at 22:26 Comment(0)
A
0

Example of code parsing string including emoji unicode format

$str = 'Test emoji \U0001F607 \U0001F63C';

echo preg_replace_callback(
    '/\\\U([A-F0-9]+)/',
    function ($matches) {
        return mb_convert_encoding(hex2bin($matches[1]), 'UTF-8', 'UTF-32');
    },
    $str
);

Output: Test emoji 😇 😼

https://3v4l.org/63dUR

Awhile answered 19/9, 2022 at 5:18 Comment(1)
As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.Charentemaritime

© 2022 - 2024 — McMap. All rights reserved.