Конвертируйте строку \ u emoji в utf-8 для тела письма - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть следующие смайлики в строковой переменной PHP

$emoji = "\u{1F9D1}\u{1F4AC}";
echo $emoji;

Этот код выше напечатает следующие смайлики.

??

Я хотел встроить эти смайлики в электронное письмотело.Для этого я хочу преобразовать их в ?? , чтобы я мог поместить их в тело письма, и они будут отображаться правильно.

Как мне это сделать в PHP?

1 Ответ

0 голосов
/ 12 апреля 2019
$foo = preg_replace('#\\\u\{(.*?)\}#', '&#x$1;', $emoji);
  • \ u необходимо экранировать, потому что оно имеет особое значение в регулярном выражении, и поскольку обратная косая черта также имеет особое значение в текстовых литералах PHP, нам нужно три из них здесь.

  • {и} также имеют особое значение, поэтому их нужно экранировать с помощью одной обратной косой черты.

  • (. *?) Соответствует всему (ожидайте переводы строки),? делает его неловким.

  • Я добавил; в конце замены - браузеры отказоустойчивы, когда его нет, но это технически требуется синтаксисом HTML.


И «другое направление» в соответствии с просьбой:

$emojihtml = '🧑💬';

$bar = preg_replace('~&#x(.*?);~', '\u{$1}', $emojihtml);

(здесь я использовал ~ для разделителей регулярных выражений, потому что # является частью того, что мы хотим сопоставить, экономит при экранировании.)

...