Новое в Symfony 6.3 — Улучшения эмодзи
Эмодзи остаются важной часть веб-приложений, даже в корпоративной среде. По этой причине в Symfony 6.3 мы продолжили улучшать некоторый функционал эмодзи.
Удаление эмодзи из строки
Иногда по техническим или стилевым причинам ваше приложение не может принимать эмодзи в пользовательском контенте. Однако при использовании регулярных выражений выделение эмодзи из содержимого строки излишне сложно.
Вот почему в Symfony 6.3 мы добавили функциональность для удаления всех эмодзи из заданной строки. Эта функция реализована с помощью новой искусственной локали названой strip
, представленной в классе транслитератора эмодзи:
use Symfony\Component\Intl\Transliterator\EmojiTransliterator;
$transliterator = EmojiTransliterator::create('emoji-strip');
$result = $transliterator->transliterate('A 😺, 🐈⬛, and a 🦁');
// $result = 'A , , and a '
Вы также можете удалять эмодзи при генерации slug:
use Symfony\Component\String\Slugger\AsciiSlugger;
$slugger = new AsciiSlugger();
$slugger = $slugger->withEmoji('strip');
$slug = $slugger->slug('a 😺, 🐈⬛, and a 🦁');
// $slug = 'a-and-a';
Сжатие данных эмодзи
Предыдущая функция удаления эмодзи основана на регулярных выражениях. Вместо этого мы создали несколько правил замены, используя почти 5000 эмодзи, определённых в проекте Unicode. Правила обновляются автоматически, поэтому они всегда будут содержать все официальные эмодзи.
Основным недостатком поддержки эмодзи является то, что данные необходимые для транслитерации эмодзи на все языки, занимают много места. Компонент Intl
весит около 44 МБ, что является пустой тратой трафика и дискового пространства и может вызвать проблемы при использовании бессерверных служб с жёсткими ограничениями по размеру.
Мы обсуждали возможность создания нового компонента для хранения только данных эмодзи, но решили не делать этого, чтобы избежать хлопот, связанных с управлением. Вместо этого в Symfony 6.3 мы добавили инструмент, с помощью которого вы можете самостоятельно сжимать все данные эмодзи:
# укажите путь к двоичному файлу 'compress' в соответствии с вашим приложением
php ./vendor/symfony/intl/Resources/bin/compress
Эта команда заменит оригинальные внутренние *.php
Symfony файлы, содержащие данные эмодзи, эквивалентным файлам *.php.gz
, сжатыми с помощью PHP расширения zlib
. Это всё, что нужно сделать. Symfony распаковывает .gz
файлы на лету, как только находит их.