У нас есть несколько суррогатных пар (или 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
и несколько публичных библиотек.
Я признаю, что я не эксперт, когда дело доходит до преобразования персонажей вокруг!
Я не смог найти функцию для этого, но это работает:
$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);
}
Других решений пока нет …