PHP foreach循环打印所有表情符号
我看到有更好的支持表情符号在PHP 7,但表情符号,从引用的无包装组/库。截至目前,我必须搜索并寻找我想要的表情符号的UNICODE,地址为https://apps.timwhitlock.info/emoji/tables/unicode。PHP foreach循环打印所有表情符号
会不会有通过一个迭代循环,而不是引用数组我必须建立在我自己获得的每一个(最新)表情更简单的方法(复制粘贴&每UNICODE)?
尝试以下操作:
<?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;";
}
非常有趣的解决方案!我喜欢它如何从该网站获取到.txt文件(但是有几个Unicodes在新行上不分开 - 我必须手动修复它)。这似乎到目前为止,不过,我很好奇这个系列中是否缺少表情符号。 – theflarenet
代替手工列出所有统一码的,你可以定义范围和使用循环遍历它们,并打印出来。
这可能是这样的:
$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解码。据我所知,可悲的是没有更简单的方法来实现这一点。
有趣的,但范围1f300到1f5ff范围内的一些Emojis不被识别。另外为什么限制为UTF-8,如果你不介意我问的话?尽管如此,答案很好。 – theflarenet
@theflarenet大多数页面都是utf-8。从来没有看到一个字符集utf-16或类似的东西。它将emojis的utf-16be表示转换为UTF-8。如果你想使用不同的编码,可以随意使用它:) ||你确定表情符号丢失了吗?使用不同的浏览器进行检查?从我的观点来看,为什么它应该适用于所有表情符号,除了这个范围内的少数表情符号以外,没有任何意义。代码是一样的,想法是一样的。所以我不确定在哪里可以找到问题的解决方案。你可以给我一个例子吗? –
对不起,迟到的回应。这是一个截图:https:// imgur。com/a/qVaWd – theflarenet
您可以从http://unicode.org/Public/emoji/6.0/emoji-data.txt查看所有最新的表情符号列表,但似乎主要支持的版本是V5可以在这里看到http://unicode.org/Public/emoji/5.0/emoji-data.txt
您需要解析使用正则表达式来获取范围的结果,那么您可以迭代preg_match的结果,并且如果您想要获取十六进制范围内所有值的范围的结束编号。如果您需要频繁执行此操作,您可能需要缓存这些结果。
$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
你会想测试这个,我只是把它放在一起真正快。
你可以用php或用户脚本解析上面的页面。应该没有问题,应该在10分钟内完成。 –
你想保留每个表情符号的描述,或者只是了解所有可用的表情符号? – kyle
也是你想保持他们分类?因为它们全都落在十六进制范围内,所以如果你确定了范围,你可以在开始范围和结束范围之间增加,从而产生emojis列表 – kyle