用于打印所有表情的PHP Foreach循环

用于打印所有表情的PHP Foreach循环,php,arrays,loops,unicode,emoji,Php,Arrays,Loops,Unicode,Emoji,我看到在PHP7中有更好的Emojis支持,但是没有可供参考的Emojis打包集/库。现在,我必须搜索并寻找我想要的表情符号的UNICODE 是否有一种更简单的方法可以通过循环而不是引用我必须自己构建的数组(复制和粘贴每个UNICODE)来获取每个(最新)表情符号?您可以定义范围并使用循环来迭代并打印它们,而不是手动列出所有UNICODE 这可能是这样的: $emojiUnicodeRange = [ [0x1f600, 0x1f64e], [0x1f910, 0x1f91e], [0x1f92

我看到在PHP7中有更好的Emojis支持,但是没有可供参考的Emojis打包集/库。现在,我必须搜索并寻找我想要的表情符号的UNICODE


是否有一种更简单的方法可以通过循环而不是引用我必须自己构建的数组(复制和粘贴每个UNICODE)来获取每个(最新)表情符号?

您可以定义范围并使用循环来迭代并打印它们,而不是手动列出所有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');
$emojinicoderange=[
[0x1f600,0x1f64e],
[0x1f910,0x1f91e],
[0x1f920,0x1f927],
[0x1f300,0x1f5ff],
[0x1f680,0x1f6c1],
[0x1f950,0x1f95e],
[0x1f980,0x1f991]
];
foreach($range作为$range)

对于($emojiUnicode=$range[0];$emojiUnicode,您可以从中查看所有最新emojis的列表,但似乎主要支持的版本是v5,可以在此处看到

您需要使用正则表达式解析结果以获得范围,然后您可以迭代preg_匹配的结果,如果要获得十六进制范围之间的所有值,那么您可能需要缓存这些结果,如果您必须频繁执行此操作

$emojis = [];

$reg = "/^(?<start>[a-fA-F0-9]+)([\.]{2})?((?<end>[a-fA-F0-9]+))?\s+;/m";
$data = file_get_contents('http://unicode.org/Public/emoji/5.0/emoji-data.txt');

$matches = [];
preg_match_all($reg, $data, $matches);

$start = $matches['start'];
$end = $matches['end'];

for ($i = 0; $i < count($start); $i++) {
    $emojis[] = $start[$i];
    if (!empty($end[$i])) {
        for ($j = $start[$i] + 0x1; $j <= $end[$i]; $j += 0x1) {
            $emojis[] = is_int($j) ? dechex($j) : $j;
        }
    }
}

// $emojis contains valid emojis from the file
$emojis=[];
$reg=“/^(?[a-fA-F0-9]+)([\.]{2})(((?[a-fA-F0-9]+))?\s+;/m”;
$data=文件\u获取\u内容('http://unicode.org/Public/emoji/5.0/emoji-data.txt');
$matches=[];
preg_match_all($reg,$data,$matches);
$start=$matches['start'];
$end=$matches['end'];
对于($i=0;$i
<?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);

你可以用php或用户脚本解析上面的页面。应该没有问题,最多10分钟就可以完成。你想保留每个表情符号的描述,还是只知道所有可用的表情符号?你也想对它们进行分类?因为它们都在十六进制范围内,所以如果你确定范围你可以在开始范围和结束范围之间增加,从而得到表情列表。我希望知道所有可用的表情列表,这样我就可以运行循环并出于各种原因打印整个表情集。分类不是真正的要求——只要我可以从某个来源打印所有表情列表,而不需要做任何繁琐的工作(设置所有UNICODE的数组)。很有趣,但一些1f300到1f5ff范围内的表情无法识别。如果你不介意我问的话,为什么要限制为UTF-8?答案很好。@TheFlarnet大多数页面都是UTF-8。从未见过带有UTF-16或类似字符集的页面。它会将表情的UTF-16be表示形式转换为UTF-8。如果你想使用不同的编码可以随意使用:)| |你确定表情符号丢失了吗?用不同的浏览器检查了吗?从我的观点来看,除了这个范围内的少数表情符号外,它为什么应该适用于所有表情符号没有任何意义。代码是一样的,想法是一样的。所以我不确定我在哪里可以找到解决问题的方法。你能给我一个例子吗?@theflarenet对不起,但我是c当我跟随链接时,看不到图像。我不知道为什么。你能以其他方式与我共享吗?@theflarenet似乎没有表情符号。代码是保留的,但没有为代码分配表情符号。非常有趣的解决方案!我喜欢它从该站点获取.txt文件的方式(然而,一些Unicode在新行中并不是独立的——我必须手动修复它)。到目前为止,这似乎是可行的;然而,我很好奇这个集合中是否有缺失的表情符号。
<?php

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

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