Мне нужно получить шестнадцатеричный код кодировки unicode для глифов.
То, что я делаю, работает большую часть времени:
$hex = dechex(unpack('V', iconv('UTF-8', 'UCS-4LE', $glyph)[1]);
Где ut терпит неудачу:
ȳ ȳ ȳ ȳ ȳ
Все те возвращаются 233, но 233 верны только в первом случае. Остальные - разные глифы, которые выглядят иначе.
Кажется, что он терпит неудачу, когда речь идет о нескольких диакритических знаках, но иногда это становится правильным.
Почему это не так?
Поскольку способ составления текста зависит от программного обеспечения, которое его составляло, и если это программное обеспечение не дает гарантий или вы не ставите своей целью нормализовать ввод, вы действительно не можете делать предположения.
Даже в самом простом (первом) примере вход может быть законно составлен из одного символа LATIN SMALL LETTER Y WITH MACRON '(U + 0233) или двух кодовой комбинации LATIN SMALL LETTER Y (U + 0079) и COMBINING MACRON ( U + 0304). В каждом случае вы получите разные результаты, хотя вход будет визуально и семантически идентичным (единственное различие состоит в том, что оно является байтовым, что является детальностью реализации).