function utf8_to_unicode_code($utf8_string)
{
$expanded = iconv("UTF-8", "UTF-32", $utf8_string);
return unpack("L*", $expanded);
}
Это делает две вещи неправильно:
Используется «UTF-32», который отбрасывает нежелательную спецификацию в начале строки, поэтому вы получаете65279 (0xFEFF BOM).Вы не хотите, чтобы случайные спецификации висели вокруг места, вызывая проблемы.
В нем используется машинная последовательность байтов (прописная L
), с которой iconv
вполне может не согласиться.Честно говоря, я бы не ожидал, что будет конфликтовать на Windows-боксе (поскольку i386 является прямым порядком байтов независимо от ОС), но, очевидно, так оно и есть, поскольку полученные значения - это то, что нужнорезультат обратного порядка следования байтов.
Лучше явно указать оба порядка байтов и избегать спецификации.Используйте UCS-4LE
в качестве кодировки и распакуйте с V*
.То же самое относится и к unicode_code_to_utf8
.
. Также не обращайте внимания на листинг 6. Символ многоточия, например, лигатура и т. Д., Является символом совместимости, который мы бы не использовали в современном Unicode-and-Мир OpenType.Шрифт должен предоставить контекстные альтернативы для fi
или ...
, если он этого хочет, вместо того, чтобы требовать от нас искажать текст.