Новое в Symfony 6.3 — Улучшения эмодзи

Источник: «New in Symfony 6.3: Emoji Improvements»
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 файлы на лету, как только находит их.

Дополнительные материалы

Предыдущая Статья

Laravel AaaS — Actions as a Service

Следующая Статья

Как безопасно использовать Laravel Фасады