Кодирование Emoji (Unicode) в амперсанд UTF-8 и хэш (?) - PullRequest
0 голосов
/ 30 апреля 2018

Для обеспечения совместимости с уже существующим PHP-решением мне требуется

вход: ? // emoji character, выход: 😁

Я полагаю, что это кодировка "амперсанда и хэша" (я не уверен, что это то, что она называется ... Будь я проклят, если смогу найти какие-либо ресурсы, которые объясняют, как я пришел к этому формату ... или почему это кодировка подходит для ...)

Я могу получить байты путем URL-кодирования Unicode ...

<?php  print urlencode("?"); /* Output: %F0%9F%98%81 */  ?>

... и я могу использовать Regex для преобразования этого в нужный мне формат ... но мне не нравится это решение. Это очень хакерское и очень склонное к случайному кодированию некодированных строк ...

<?php
  $enc = urlencode("?");
  print $enc; // %F0%9F%98%81
  $find = '/(%)([0-9a-fA-F][0-9a-fA-F])/i';
  $replacement = '&#x$2;';
  print preg_replace($find,$replacement,$enc);
?>

Результат: &#xF0;&#x9F;&#x98;&#x81

Есть ли лучший подход?

Как называется эта кодировка и как ее получить (через PHP)?

Большое спасибо!

Редактировать: Оказывается, такой подход в конце концов не подходит. urlencode преобразует все пробелы в + символов. Должен быть правильный подход, чтобы прийти к этому формату?

1 Ответ

0 голосов
/ 04 мая 2018

&#xF0;&#x9F;&#x98;&#x81; - это "HTML-объекты"; он представляет 4 шестнадцатеричных байта F09F9891, который является кодировкой UTF-8 для этого Emoji. Я подозреваю, что вы пытаетесь успокоить HTML, а не PHP?

http://unicode.scarfboy.com/?s=%F0%9F%98%81 - пройти часть страницы вниз до «строки», чтобы увидеть, как ее кодировать для HTML, utf8, python, javascript и т. Д.

Один из способов в PHP:

echo bin2hex('?');   // f09f9881

Затем разбейте его на группы из 2 шестнадцатеричных цифр.

...