Я хочу нормализовать набор символов Юникода. Однако, когда символы имеют более одного акцента, каноническая нормализация не работает должным образом.
Код теста, который я использовал ниже:
<?php
function print_codes($s) {
$chars = preg_split('//u', $s, -1, PREG_SPLIT_NO_EMPTY);
echo implode(' ', $chars) . '<br>';
}
$k1 = 'කො';
$k2 = 'කො';
$k3 = 'කාෙ';
print_codes($k1);
print_codes($k2);
print_codes($k3);
echo '*Normalizer*<br>';
$k1 = normalizer_normalize($k1, Normalizer::FORM_C);
$k2 = normalizer_normalize($k2, Normalizer::FORM_C);
$k3 = normalizer_normalize($k3, Normalizer::FORM_C);
print_codes($k1);
print_codes($k2);
print_codes($k3);
?>
Обратите внимание, что k3 не нормализуется, как ожидалось.
Постскриптум хотя три переменные могут иметь одинаковый характер, различный порядок акцента, пожалуйста, скопируйте и вставьте в редактор с поддержкой Unicode).
Задача ещё не решена.
Других решений пока нет …