andrewdavid / emoji-detector
检测并返回字符串中找到的所有表情符号
1.0.0
2023-05-25 23:00 UTC
Requires
- php: >=7.2
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^8.5
README
此库将在输入字符串中找到所有表情符号,并返回每个表情字符的信息。它支持带有肤色修饰符的表情符号,以及由多个人组成的组合表情符号。
安装
composer require andrewdavid/emoji-detector
或者将 src/emoji-detector/Emoji.php
包含到您的项目中,并确保 map.json
和 regexp.json
文件与 Emoji.php
在同一目录下。您不需要其他任何文件用于在您自己的项目中使用。
用法
检测表情符号
$input = "Hello 👍🏼 World 👨👩👦👦"; $emoji = (new Emoji\EmojiDetector())->detectEmoji($input); print_r($emoji);
该函数返回一个数组,包含字符串中找到的每个表情符号的详细信息。
Array
(
[0] => Array
(
[emoji] => 👍🏼
[short_name] => +1
[num_points] => 2
[points_hex] => Array
(
[0] => 1F44D
[1] => 1F3FC
)
[hex_str] => 1F44D-1F3FC
[skin_tone] => skin-tone-3
[byte_offset] => 6
[grapheme_offset] => 6
)
[1] => Array
(
[emoji] => 👨👩👦👦
[short_name] => man-woman-boy-boy
[num_points] => 7
[points_hex] => Array
(
[0] => 1F468
[1] => 200D
[2] => 1F469
[3] => 200D
[4] => 1F466
[5] => 200D
[6] => 1F466
)
[hex_str] => 1F468-200D-1F469-200D-1F466-200D-1F466
[skin_tone] =>
[byte_offset] => 21
[grapheme_offset] => 14
)
)
emoji
- 找到的表情符号序列,作为原始字节序列。您可以输出此内容以显示原始表情符号。short_name
- 表情符号的短名称,由 Slack 的表情符号数据 定义。num_points
- 该表情符号由多少个 Unicode 代码点组成。points_hex
- 一个数组,包含构成该表情符号的每个 Unicode 代码点。这些返回为十六进制字符串。这还将包括“不可见”的字符,如 ZWJ 字符和肤色修饰符。hex_str
- 一个列表,包含所有 Unicode 代码点的十六进制形式,用连字符分隔。此字符串出现在 Slack 表情符号数据 数组中。skin_tone
- 如果表情符号中使用了肤色修饰符,此字段表示哪种肤色,因为short_name
不会包括肤色。byte_offset
- 表情符号在字符串中的字节位置,与纯str*
函数一起使用grapheme_offset
- 表情符号在字符串中的位置,将每个表情符号计为一个字符,与grapheme_*
函数一起使用
您可以使用 grapheme_*
函数使用 grapheme_offset
位置返回的内容提取字符串的一部分。例如
$string = "Trešnja 🍒"; $emoji = (new Emoji\EmojiDetector())->detectEmoji($string); echo '.'.grapheme_substr($string, 0, $emoji[0]['grapheme_offset']).".\n"; echo '.'.substr($string, 0, $emoji[0]['byte_offset']).".\n"; // Both output ".Trešnja ."
将表情符号替换为字符串表示
$string = (new Emoji\EmojiDetector())->replaceEmoji('I like 🌮 and 🌯', ':', ':'); echo $string; // I like :taco: and :burrito:
测试字符串是否为单个表情符号
由于仅仅计算字符串中的 Unicode 字符数量并不能告诉你字符串中有多少可见表情符号,因此确定单个字符是否为表情符号更为复杂。此函数仅在字符串包含单个表情符号字符时返回表情符号数据,否则返回 false。
$emoji = (new Emoji\EmojiDetector())->isSingleEmoji('👨👩👦👦'); print_r($emoji);
Array
(
[emoji] => 👨👩👦👦
[short_name] => man-woman-boy-boy
[num_points] => 7
[points_hex] => Array
(
[0] => 1F468
[1] => 200D
[2] => 1F469
[3] => 200D
[4] => 1F466
[5] => 200D
[6] => 1F466
)
[hex_str] => 1F468-200D-1F469-200D-1F466-200D-1F466
[skin_tone] =>
[byte_offset] => 0
[grapheme_offset] => 0
)
$emoji = (new Emoji\EmojiDetector())->isSingleEmoji('😻🐈'); // false
许可证
版权所有 2017-2022 年由 Aaron Parecki。
在 MIT 许可证下可用。
表情符号数据来源于 iamcal/emoji-data,在 MIT 许可证下。
表情符号解析正则表达式来源于 EmojiOne,在 MIT 许可证下。