I currentyl не имеют понятия о том, как отсортировать массив, который содержит кодированные строки UTF-8 в PHP. Массив поставляется с сервера LDAP, поэтому сортировка по базе данных (без проблем) не является решением. Следующее не работает на моей машине разработки Windows (хотя я думаю, что это должно быть как минимум возможным решением):
$array=array('Birnen', 'Äpfel', 'Ungetüme', 'Apfel', 'Ungetiere', 'Österreich');
$oldLocal=setlocale(LC_COLLATE, "0");
var_dump(setlocale(LC_COLLATE, 'German_Germany.65001'));
usort($array, 'strcoll');
var_dump(setlocale(LC_COLLATE, $oldLocal));
var_dump($array);
Вывод:
string(20) "German_Germany.65001"
string(1) "C"
array(6) {
[0]=>
string(6) "Birnen"
[1]=>
string(9) "Ungetiere"
[2]=>
string(6) "Äpfel"
[3]=>
string(5) "Apfel"
[4]=>
string(9) "Ungetüme"
[5]=>
string(11) "Österreich"
}
Это полная глупость. Использование 1252 в качестве кодовой страницы для setlocale()
дает другой результат, но все же явно неправильный:
string(19) "German_Germany.1252"
string(1) "C"
array(6) {
[0]=>
string(11) "Österreich"
[1]=>
string(6) "Äpfel"
[2]=>
string(5) "Apfel"
[3]=>
string(6) "Birnen"
[4]=>
string(9) "Ungetüme"
[5]=>
string(9) "Ungetiere"
}
Есть ли способ сортировки массива с локализацией строк UTF-8?
Просто отметили, что это похоже на проблему с PHP на Windows, поскольку тот же фрагмент с de_DE.utf8
, используемый в качестве языкового стандарта, работает на машине Linux. Тем не менее решение для этой проблемы, связанной с Windows, было бы неплохо...