Работа с emoji
Дата обновления перевода 2025-08-25
Работа с emoji
7.1
Компонент emoji был представлен в Symfony 7.1.
Symfony предоставляет несколько утилит для работы с символами и последовательностями эмодзи из набора данных Unicode CLDR. Они доступны через компонент Emoji, который вы должны предварительно установить в вашем приложении:
1
$ composer require symfony/emoji
Note
Если вы устанавливаете этот компонент вне приложения Symfony, вам нужно
подключить файл vendor/autoload.php в вашем коде для включения механизма
автозагрузки классов, предоставляемых Composer. Детальнее читайте в
этой статье.
Данные, необходимые для хранения транслитерации всех эмодзи ( 5,000) на всех языках, занимают значительный объем дискового пространства.
Если вам нужно сэкономить место на диске (например, из-за того, что вы разворачиваете
систему на каком-то сервисе с жесткими ограничениями по размеру), выполните эту команду
(например, как автоматический скрипт после composer install), чтобы сжать
внутренние файлы данных эмодзи Symfony с помощью расширения PHP zlib:
1 2
# настроить путь к бинарности 'compress', основываясь на установке вашего приложения
$ php ./vendor/symfony/emoji/Resources/bin/compress
Транслитерация эмодзи
Класс EmojiTransliterator предлагает способ перевода эмодзи в их текстовое представление
на всех языках на основе набора данных Unicode CLDR:
1 2 3 4 5 6 7 8 9 10 11
use Symfony\Component\Emoji\EmojiTransliterator;
// Описать эмодзи на английском
$transliterator = EmojiTransliterator::create('en');
$transliterator->transliterate('Menus with 🍕 or 🍝');
// => 'Menus with pizza or spaghetti'
// Описать эмодзи на украинском
$transliterator = EmojiTransliterator::create('uk');
$transliterator->transliterate('Menus with 🍕 or 🍝');
// => 'Menus with піца or спагеті'
Tip
При использовании слаггера из компонента String,
вы можете комбинировать его с EmojiTransliterator для
слаггификации эмодзи .
Транслитерация коротких текстовых кодов эмодзи
Такие сервисы, как GitHub и Slack, позволяют включать эмодзи в ваши сообщения с помощью
коротких текстовых кодов (например, вы можете добавить код :+1: для отображения эмодзи 👍).
Symfony также предоставляет возможность транслитерировать эмодзи в короткие коды и наоборот.
Короткие коды несколько отличаются для каждого сервиса, поэтому вы должны передать
название сервиса как аргумент при создании транслитератора.
Транслитерация коротких кодов эмодзи GitHub
Конвертируйте эмодзи в короткие коды GitHub с помощью локали emoji-github:
1 2 3
$transliterator = EmojiTransliterator::create('emoji-github');
$transliterator->transliterate('Teenage 🐢 really love 🍕');
// => 'Teenage :turtle: really love :pizza:'
Конвертируйте короткие коды GitHub в эмодзи с помощью локали github-emoji:
1 2 3
$transliterator = EmojiTransliterator::create('github-emoji');
$transliterator->transliterate('Teenage :turtle: really love :pizza:');
// => 'Teenage 🐢 really love 🍕'
Транслитерация коротких кодов эмодзи Gitlab
Конвертируйте эмодзи в короткие коды Gitlab с помощью локали emoji-gitlab:
1 2 3
$transliterator = EmojiTransliterator::create('emoji-gitlab');
$transliterator->transliterate('Breakfast with 🥝 or 🥛');
// => 'Breakfast with :kiwi: or :milk:'
Конвертируйте короткие коды Gitlab в эмодзи с помощью локали gitlab-emoji:
1 2 3
$transliterator = EmojiTransliterator::create('gitlab-emoji');
$transliterator->transliterate('Breakfast with :kiwi: or :milk:');
// => 'Breakfast with 🥝 or 🥛'
Транслитерация коротких кодов эмодзи Slack
Конвертируйте эмодзи в короткие коды Slack с помощью локали emoji-slack:
1 2 3
$transliterator = EmojiTransliterator::create('emoji-slack');
$transliterator->transliterate('Menus with 🥗 or 🧆');
// => 'Menus with :green_salad: or :falafel:'
Конвертируйте короткие коды Slack в эмодзи с помощью локали slack-emoji:
1 2 3
$transliterator = EmojiTransliterator::create('slack-emoji');
$transliterator->transliterate('Menus with :green_salad: or :falafel:');
// => 'Menus with 🥗 or 🧆'
Транслитерация универсальных коротких кодов эмодзи
Если вы не знаете, какой сервис был использован для генерации коротких кодов, вы можете воспользоваться
локалью text-emoji, которая объединяет все коды со всех сервисов:
1 2 3 4 5 6 7 8 9 10 11
$transliterator = EmojiTransliterator::create('text-emoji');
// короткие коды Github
$transliterator->transliterate('Breakfast with :kiwi-fruit: or :milk-glass:');
// короткие коды Gitlab
$transliterator->transliterate('Breakfast with :kiwi: or :milk:');
// короткие коды Slack
$transliterator->transliterate('Breakfast with :kiwifruit: or :glass-of-milk:');
// все примеры выше приводят к одному результату:
// => 'Breakfast with 🥝 or 🥛'
Вы можете превратить эмодзи в короткие коды с помощью локали emoji-text:
1 2 3
$transliterator = EmojiTransliterator::create('emoji-text');
$transliterator->transliterate('Breakfast with 🥝 or 🥛');
// => 'Breakfast with :kiwifruit: or :milk-glass:
Обратная транслитерация эмодзи
Имея текстовое представление эмодзи, вы можете преобразовать его обратно, чтобы получить, собственно, эмодзи благодаря фильтру emojify:
1 2 3
{{ 'I like :kiwi-fruit:'|emojify }} {# renders: I like 🥝 #}
{{ 'I like :kiwi:'|emojify }} {# renders: I like 🥝 #}
{{ 'I like :kiwifruit:'|emojify }} {# renders: I like 🥝 #}
По умолчанию emojify использует текстовый каталог , который
объединяет текстовые коды эмодзи всех сервисов. Если вы хотите, вы можете выбрать
конкретный каталог для использования:
1 2 3 4
{{ 'I :green-heart: this'|emojify }} {# отображает: I 💚 this #}
{{ ':green_salad: is nice'|emojify('slack') }} {# отображает: 🥗 is nice #}
{{ 'My :turtle: has no name yet'|emojify('github') }} {# отображает: My 🐢 has no name yet #}
{{ ':kiwi: is a great fruit'|emojify('gitlab') }} {# отображает: 🥝 is a great fruit #}
Удаление эмодзи
С помощью EmojiTransliterator можно также удалить все эмодзи из строки,
с помощью специальной локали strip:
1 2 3 4 5
use Symfony\Component\Emoji\EmojiTransliterator;
$transliterator = EmojiTransliterator::create('strip');
$transliterator->transliterate('🎉Hey!🥳 🎁Happy Birthday!🎁');
// => 'Hey! Happy Birthday!'