Как взорвать 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"');