Преобразовать & # 55357; & # 56911; смайликов в HTML с помощью PHP

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

пример:

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

Этот сайт преобразует �� должным образом:

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

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

Please join me in this prayer. ��❤️

Вы заметите суррагатную пару (��) преобразуется в

Этот сайт утверждает, что использует HTMLDecode, но я не могу найти что-либо внутри php, чтобы осуществить это. Я попробовал: iconv html_entity_decode и несколько публичных библиотек.

Я признаю, что я не эксперт, когда дело доходит до конвертации символов вокруг!

2 ответа

Решение

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

$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);
}

Я хотел бы воспользоваться моментом, чтобы очистить рабочий код TylerF.

Код: (Демо)

      $str = "Please join me in this prayer. ��❤️";
echo preg_replace_callback(
         "/&#(\d{5});&#(\d{5});/",
         function($m) {
             return iconv("UTF-16BE", "UTF-8", hex2bin(dechex($m[1]) . dechex($m[2])));
         },
         $str
     );

Выход:

      Please join me in this prayer. ❤️
  • Заменены точки на соответствие цифровым символам и использованы группы захвата для упрощения последующих процессов.
  • Больше не надо str_replace()или же explode()вызовы в пользовательской функции.
  • Никаких одноразовых объявлений переменных.
Другие вопросы по тегам