Как взорвать Emojis Unicode в PHP

Я использую кометы для веб-сайта. И сейчас я разрабатываю реагирующий API, и для этого они не предоставляют никакой поддержки, поэтому мне нужно создать Emoji API для приложений IOS и Android Chat. В БД мы храним смайлики как тэг IMG. Мы подготовили массив, как показано ниже

$symbols = array(
    ':n100:' => '\ud83d\udcaf',
    ':n1234:' => '\ud83d\udd22',
    ':a:' => '\ud83c\udd70',
    ':ab:' => '\ud83c\udd8e',
    ':abc:' => '\ud83d\udd24',
    ':abcd:' => '\ud83d\udd21',
    ':accept:' => '\ud83c\ude51',
    ':aquarius:' => '\u2652',
    ':aries:' => '\u2648',
);
$smiley = array(
':n100:': 'n100.png',
':n1234:':'n1234.png', ....
);

Теперь основная проблема заключается в возвращении строки приложениями IOS и Android. Я не мог разобрать смайлик из этой строки. Ниже приведены примеры строк.

Str1: "Lorem Ipsum \u23eb \u23ec"
Str2: "lorem \u23ec\u23eb Ipsum"
Str3: "\ud83d\udd04\ud83d\udd3c"

Как вы можете видеть, в string1,string2 есть два смайла, один с пробелом, а другой без пробела. А в строке 3 он также содержит только две улыбки ("\ud83d\udd04","\ud83d\udd3c").

Не могли бы вы, ребята, помочь мне разобрать строку смайлика или Юникода и разобрать сообщение, а также смайлики из строки?

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

Заранее спасибо.

1 ответ

JSON \u может обрабатывать только одну кодовую единицу UTF-16 за раз, поэтому вместо этого вам нужно написать суррогатную пару. Для U+1F600 это \uD83D\uDE00, которое работает:

echo json_decode('"\uD83D\uDE00"');

Другие вопросы по тегам