我看到在PHP7中有更好的表情支持,但是没有打包的表情集/库可供参考。到目前为止,我必须在https://apps.timwhitlock.info/emoji/tables/unicode上搜索和寻找我想要的表情符号的UNICODE。
有没有一种更简单的方法可以通过循环迭代获得每个(最新的) Emoji,而不是引用我必须自己构建的数组(复制和粘贴每个UNICODE)?
发布于 2017-10-14 07:28:33
尝试以下操作:
<?php
$data = file_get_contents("https://apps.timwhitlock.info/emoji/tables/unicode");
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($data);
libxml_clear_errors();
$finder = new DomXPath($doc);
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' code ')]");
$unicodes = [];
$i = 1;
foreach ($nodes as $node)
{
if($i % 2 === 0) {$i++;continue;}
$unicode = trim($node->textContent);
$unicodes[] = $unicode;
file_put_contents("unicodes.txt", $unicode. "\r\n", FILE_APPEND);
$i++;
}
var_dump($unicodes);
它将从站点获取所有Unicodes
,并将其存储在文件unicodes.txt
和数组$unicodes
中。这只是简单地使用DOMDocument
来删除页面。然后,您可以使用以下命令获取所有它们:
<?php
$emojis = file("unicodes.txt");
foreach($emojis as $emoji)
{
$emoji = trim($emoji);
$emoji = hexdec($emoji);
echo "&#$emoji;";
}
发布于 2017-10-14 07:08:15
您可以定义范围并使用循环遍历它们并打印它们,而不是手动列出所有unicode。
这可能如下所示:
$emojiUnicodeRange = [
[0x1f600, 0x1f64e],
[0x1f910, 0x1f91e],
[0x1f920, 0x1f927],
[0x1f300, 0x1f5ff],
[0x1f680, 0x1f6c1],
[0x1f950, 0x1f95e],
[0x1f980, 0x1f991]
];
foreach($emojiUnicodeRange as $range)
for($emojiUnicode=$range[0];$emojiUnicode<=$range[1];$emojiUnicode++)
echo html_entity_decode('&#'.$emojiUnicode.';', 0, 'UTF-8');
html_entity_decode('&#'.$emojiUnicode.';', 0, 'UTF-8')
部分将十六进制数字转换为实体,并将其解码为utf-8。可悲的是,据我所知,没有更容易的方法来实现这一点。
发布于 2021-07-14 01:55:02
嗨,这里是关于kyle的更新答案
$emojis = [];
$reg = "/^(?<start>[A-F0-9 ]+)(?:[\.]{2})?((?<end>[A-F0-9 ]+))?.*;/m";
$data = file_get_contents('https://unicode.org/Public/emoji/14.0/emoji-sequences.txt');
$matches = [];
preg_match_all($reg, $data, $matches);
$start = str_replace(' ', '', $matches['start']);
$end = str_replace(' ', '', $matches['end']);
for ($i = 0; $i < count($start); $i++) {
$emojis[] = $start[$i];
if (!empty($end[$i])) {
for ($j = hexdec($start[$i]) + 0x1; $j <= hexdec($end[$i]); $j += 0x1) {
$emojis[] = dechex($j);
}
}
}
https://stackoverflow.com/questions/46738692
复制相似问题