Как перевести строку байтов в кодировке эмодзи в соответствующий UTF-8 в переполнении стека

У меня есть строка, которая является представлением Unicode в форме: ‘\ ud83d \ ude01’. Как я могу перевести его в фактическое представление UTF-8: «��»?

Я пробовал следующий код:

$emoji = '\\ud83d\\ude01';

#Cleanup
$emoji = str_replace("\\u", "", $emoji);

#Split hex
$hex_bytes = str_split($emoji, 2);
$hex_bytes_numbers = array();

#Convert to actual numbers
foreach($hex_bytes as $hex)
array_push($hex_bytes_numbers, hexdec($hex));


$clean_hex_string = implode(array_map("chr", $hex_bytes_numbers));

#Returns: Ø=Þ
echo $clean_hex_string . "\n";

#Returns : ?=?
echo utf8_decode($clean_hex_string);

2

Решение

\\ud83d\\ude01 выглядит как сбежавшая форма UTF-16.

Код для удаления и декодирования очень прост:

$myInput = '\\ud83d\\ude01';

$myHexString = str_replace('\\u', '', $myInput);
$myBinString = hex2bin($myHexString);

print iconv("UTF-16BE", "UTF-8", $myBinString);
0

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

Решил это с помощью:

print json_encode('"$emoji"');

Нашел, что это самый простой метод.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector