跳到內容

使用 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 結合,以將 emoji 轉換為 slug

轉譯 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 使用 文字目錄,它合併了所有服務的 emoji 文字代碼。如果您願意,您可以選擇要使用的特定目錄

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 授權條款授權。
目錄
    版本