使用 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!'