Конвертировать & #56911; в Emoji в HTML с помощью PHP

у нас есть куча суррогатной пары (или 2-байтовый utf8?) такие символы, как �� который является молитва руки emojis хранится как UTF8 как 2 символа. При отображении в браузере эта строка отображается как два ??

пример:

мне нужно преобразовать их в руки emjoi с помощью php, но я просто не могу найти комбинацию iconv, utf8_decode, html_entity_decode и т. д., чтобы снять ее.

этот сайт преобразует �� правильно:

http://www.convertstring.com/EncodeDecode/HtmlDecode

вставьте туда следующую строку

Please join me in this prayer. ��❤️

Вы заметите, что пара surragate (��) превращается в

1 ответов


Я не смог найти функцию для этого, но это работает:

$str = "Please join me in this prayer. ��❤️";
$newStr = preg_replace_callback("/&#.....;&#.....;/", function($matches){return convertToEmoji($matches);}, $str);
print_r($newStr);
function convertToEmoji($matches){
    $newStr = $matches[0];
    $newStr = str_replace("&#", '', $newStr);
    $newStr = str_replace(";", '##', $newStr);
    $myEmoji = explode("##", $newStr);
    $newStr = dechex($myEmoji[0]) . dechex($myEmoji[1]);
    $newStr = hex2bin($newStr);
    return iconv("UTF-16BE", "UTF-8", $newStr);
}