跳到内容

使用 Emoji

编辑此页

7.1

emoji 组件在 Symfony 7.1 中引入。

Symfony 提供了几个实用工具来处理来自 Unicode CLDR 数据集 的 emoji 字符和序列。它们通过 Emoji 组件提供,你必须首先在你的应用中安装它

1
$ composer require symfony/emoji

注意

如果你在 Symfony 应用之外安装此组件,你必须在你的代码中引入 vendor/autoload.php 文件,以启用 Composer 提供的类自动加载机制。阅读 这篇文章 以获取更多细节。

存储所有 emoji (~5,000 个) 到所有语言的音译所需的数据会占用相当大的磁盘空间。

如果你需要节省磁盘空间 (例如,因为你部署到一些有严格大小约束的服务),运行此命令 (例如,作为 composer install 之后的自动化脚本) 使用 PHP zlib 扩展压缩内部 Symfony emoji 数据文件

1
2
# adjust the path to the 'compress' binary based on your application installation
$ php ./vendor/symfony/emoji/Resources/bin/compress

Emoji 音译

EmojiTransliterator 类提供了一种基于 Unicode CLDR 数据集 将 emoji 翻译成所有语言的文本表示的方法

1
2
3
4
5
6
7
8
9
10
11
use Symfony\Component\Emoji\EmojiTransliterator;

// Describe emojis in English
$transliterator = EmojiTransliterator::create('en');
$transliterator->transliterate('Menus with 🍕 or 🍝');
// => 'Menus with pizza or spaghetti'

// Describe emojis in Ukrainian
$transliterator = EmojiTransliterator::create('uk');
$transliterator->transliterate('Menus with 🍕 or 🍝');
// => 'Menus with піца or спагеті'

提示

当使用 String 组件中的 slugger 时,你可以将其与 EmojiTransliterator 结合使用来 slugify emojis

音译 Emoji 文本短代码

像 GitHub 和 Slack 这样的服务允许在你的消息中使用文本短代码来包含 emoji (例如,你可以添加 :+1: 代码来渲染 👍 emoji)。

Symfony 还提供了一个功能来将 emoji 音译为短代码,反之亦然。短代码在每个服务上略有不同,因此在创建音译器时,你必须传递服务的名称作为参数。

GitHub Emoji 短代码音译

使用 emoji-github 本地化配置将 emoji 转换为 GitHub 短代码

1
2
3
$transliterator = EmojiTransliterator::create('emoji-github');
$transliterator->transliterate('Teenage 🐢 really love 🍕');
// => 'Teenage :turtle: really love :pizza:'

使用 github-emoji 本地化配置将 GitHub 短代码转换为 emoji

1
2
3
$transliterator = EmojiTransliterator::create('github-emoji');
$transliterator->transliterate('Teenage :turtle: really love :pizza:');
// => 'Teenage 🐢 really love 🍕'

Gitlab Emoji 短代码音译

使用 emoji-gitlab 本地化配置将 emoji 转换为 Gitlab 短代码

1
2
3
$transliterator = EmojiTransliterator::create('emoji-gitlab');
$transliterator->transliterate('Breakfast with 🥝 or 🥛');
// => 'Breakfast with :kiwi: or :milk:'

使用 gitlab-emoji 本地化配置将 Gitlab 短代码转换为 emoji

1
2
3
$transliterator = EmojiTransliterator::create('gitlab-emoji');
$transliterator->transliterate('Breakfast with :kiwi: or :milk:');
// => 'Breakfast with 🥝 or 🥛'

Slack Emoji 短代码音译

使用 emoji-slack 本地化配置将 emoji 转换为 Slack 短代码

1
2
3
$transliterator = EmojiTransliterator::create('emoji-slack');
$transliterator->transliterate('Menus with 🥗 or 🧆');
// => 'Menus with :green_salad: or :falafel:'

使用 slack-emoji 本地化配置将 Slack 短代码转换为 emoji

1
2
3
$transliterator = EmojiTransliterator::create('slack-emoji');
$transliterator->transliterate('Menus with :green_salad: or :falafel:');
// => 'Menus with 🥗 or 🧆'

通用 Emoji 短代码音译

如果你不知道哪个服务用于生成短代码,你可以使用 text-emoji 本地化配置,它结合了所有服务的所有代码

1
2
3
4
5
6
7
8
9
10
11
$transliterator = EmojiTransliterator::create('text-emoji');

// Github short codes
$transliterator->transliterate('Breakfast with :kiwi-fruit: or :milk-glass:');
// Gitlab short codes
$transliterator->transliterate('Breakfast with :kiwi: or :milk:');
// Slack short codes
$transliterator->transliterate('Breakfast with :kiwifruit: or :glass-of-milk:');

// all the above examples produce the same result:
// => 'Breakfast with 🥝 or 🥛'

你可以使用 emoji-text 本地化配置将 emoji 转换为短代码

1
2
3
$transliterator = EmojiTransliterator::create('emoji-text');
$transliterator->transliterate('Breakfast with 🥝 or 🥛');
// => 'Breakfast with :kiwifruit: or :milk-glass:

反向 Emoji 音译

给定 emoji 的文本表示,你可以借助 emojify 过滤器 将其反转回实际的 emoji

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 使用 text catalog,它合并了所有服务的 emoji 文本代码。如果你愿意,你可以选择要使用的特定 catalog

1
2
3
4
{{ 'I :green-heart: this'|emojify }}                  {# renders: I 💚 this #}
{{ ':green_salad: is nice'|emojify('slack') }}        {# renders: 🥗 is nice #}
{{ 'My :turtle: has no name yet'|emojify('github') }} {# renders: My 🐢 has no name yet #}
{{ ':kiwi: is a great fruit'|emojify('gitlab') }}     {# renders: 🥝 is a great fruit #}

移除 Emoji

EmojiTransliterator 也可以用于从字符串中移除所有 emoji,通过特殊的 strip 本地化配置

1
2
3
4
5
use Symfony\Component\Emoji\EmojiTransliterator;

$transliterator = EmojiTransliterator::create('strip');
$transliterator->transliterate('🎉Hey!🥳 🎁Happy Birthday!🎁');
// => 'Hey! Happy Birthday!'
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本