Я столкнулся с той же проблемой с немецким «Умлаут». После некоторых исследований это сработало для меня:
$laender =array("Österreich", "Schweiz", "England", "France", "Ägypten");
$laender = array_map("utf8_decode", $laender);
setlocale(LC_ALL,"de_DE@euro", "de_DE", "deu_deu");
sort($laender, SORT_LOCALE_STRING);
$laender = array_map("utf8_encode", $laender);
print_r($laender);
Результат:
Array ([0] => Ägypten [1] => Англия [2] = > Франция [3] => Österreich [4] => Schweiz)
blockquote>