convert emoji to their hex code
Use mb_convert_encoding
and convert from UTF-8
to UTF-32
. Then do some additional formatting:
// Strips leading zeros// And returns str in UPPERCASE letters with a U+ prefixfunction format($str) { $copy = false; $len = strlen($str); $res = ''; for ($i = 0; $i < $len; ++$i) { $ch = $str[$i]; if (!$copy) { if ($ch != '0') { $copy = true; } // Prevent format("0") from returning "" else if (($i + 1) == $len) { $res = '0'; } } if ($copy) { $res .= $ch; } } return 'U+'.strtoupper($res);}function convert_emoji($emoji) { // ✊🏾 --> 0000270a0001f3fe $emoji = mb_convert_encoding($emoji, 'UTF-32', 'UTF-8'); $hex = bin2hex($emoji); // Split the UTF-32 hex representation into chunks $hex_len = strlen($hex) / 8; $chunks = array(); for ($i = 0; $i < $hex_len; ++$i) { $tmp = substr($hex, $i * 8, 8); // Format each chunk $chunks[$i] = format($tmp); } // Convert chunks array back to a string return implode($chunks, ' ');}echo convert_emoji('✊🏾'); // U+270A U+1F3FE
You can do like this, consider the emoji a normal character.
$emoji = "✊🏾";$str = str_replace('"', "", json_encode($emoji, JSON_HEX_APOS));$myInput = $str;$myHexString = str_replace('\\u', '', $myInput);$myBinString = hex2bin($myHexString);print iconv("UTF-16BE", "UTF-8", $myBinString);