Может быть, это полезно, хотя ответ больше подходит для переполнения стека. Я создал небольшой парсер в Perl, который делает то, что вы хотите. Позор, здесь нет подсветки.
#!/usr/bin/perl
use strict; use warnings;
use feature qw(say);
use Data::Dumper;
use Unicode::String;
use utf8;
my $line_no = 1;
# Read stuff from the __DATA__ section as if it were a file,
# one line at a time
while (my $line = <DATA>) {
# Create a Unicode::String object
my $us = Unicode::String->new($line);
# Iterate over the length of the string
for (my $i = 0; $i < $us->length; $i++) {
# Get the next char
my $char = $us->substr($i, 1);
# Output a description, one line per character
printf "Line %i, column %i, 0x%x '%s' (%s)\n",
$line_no, # line number
$i, # colum number
$char->ord, # the ordinal of the char, in hex
$char->as_string, # the stringified char (as in the input)
$char->name; # the glyph's name
}
# increment line number
$line_no++;
}
# Below is the DATA section, which can be used as a file handle
__DATA__
This is some very strange unicode stuff right here:
٩(-̮̮̃-̃)۶ ٩(●̮̮̃•̃)۶ ٩(͡๏̯͡๏)۶ ٩(-̮̮̃•̃).
Давайте посмотрим, что это делает:
- Чтение из дескриптора файла (раздел
DATA
может использоваться таким образом) построчно.
- Создайте объект, который представляет строку Unicode из строки.
- Итерация символов в этой строке
- Имя выхода, номер и прочее о каждом символе
Это действительно очень просто. Может быть, вы можете адаптировать его к php, хотя я не знаю, есть ли удобная библиотека для имен.
Надеюсь, поможет.
Я поднял здесь смайлики: из каких символов Юникода состоят смайлики, такие как ٩ (• ̮̮̃ • ̃)۶?