私は現在、PHPでUTF-8でエンコードされた文字列を含む配列をソートする方法について手がかりがありません。配列は 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 文字列のロケールを認識して配列をソートする方法はありますか?
ロケールとして使用される同じスニペットがde_DE.utf8
Linux マシンで動作するため、これは Windows 上の PHP の問題のように思われることに注意してください。それにもかかわらず、この Windows 固有の問題の解決策は素晴らしいでしょう...