首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP Foreach循环打印所有表情符号

PHP Foreach循环打印所有表情符号
EN

Stack Overflow用户
提问于 2017-10-14 06:12:43
回答 4查看 1.2K关注 0票数 3

我看到在PHP7中有更好的表情支持,但是没有打包的表情集/库可供参考。到目前为止,我必须在https://apps.timwhitlock.info/emoji/tables/unicode上搜索和寻找我想要的表情符号的UNICODE。

有没有一种更简单的方法可以通过循环迭代获得每个(最新的) Emoji,而不是引用我必须自己构建的数组(复制和粘贴每个UNICODE)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-10-14 07:28:33

尝试以下操作:

代码语言:javascript
运行
复制
<?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来删除页面。然后,您可以使用以下命令获取所有它们:

代码语言:javascript
运行
复制
<?php

$emojis = file("unicodes.txt");

foreach($emojis as $emoji)
{
    $emoji = trim($emoji);
    $emoji = hexdec($emoji);
    echo "&#$emoji;";
}
票数 1
EN

Stack Overflow用户

发布于 2017-10-14 07:08:15

您可以定义范围并使用循环遍历它们并打印它们,而不是手动列出所有unicode。

这可能如下所示:

代码语言:javascript
运行
复制
$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。可悲的是,据我所知,没有更容易的方法来实现这一点。

票数 1
EN

Stack Overflow用户

发布于 2021-07-14 01:55:02

嗨,这里是关于kyle的更新答案

代码语言:javascript
运行
复制
$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);
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46738692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档