Cytat
Wyniki sortowania wg. konkretnego locale nijak sie maja do kolejnosci znakow w alfabecie.
Ehe, jasne ;]
setlocale" title="Zobacz w manualu PHP" target="_manual ma wpływ na sortowanie. Niestety ale wpływ ma również kodowanie pliku i system operacyjny w jakim pracuje serwer WWW:
Przykład 1
Plik zakodowany w ISO-8859-2:<?php
$array = array( 'a', 'b', 'c', 'd', 'e', 'f', 'ą', 'ć', 'ę' ); sort( $array, SORT_LOCALE_STRING
);
header( 'Content-Type: text/html; charset=iso-8859-2' );
?>
Wynik działania skryptu w systemie Windows:
Kod
Array
(
[0] => ą
[1] => a
[2] => b
[3] => c
[4] => ć
[5] => d
[6] => e
[7] => ę
[8] => f
)
Wynik działania skryptu w systemie Linux:
Kod
Array
(
[0] => a
[1] => ą
[2] => b
[3] => c
[4] => ć
[5] => d
[6] => e
[7] => ę
[8] => f
)
Przykład 2
Plik zakodowany w Windows-1250:<?php
$array = array( 'a', 'b', 'c', 'd', 'e', 'f', 'ą', 'ć', 'ę' ); sort( $array, SORT_LOCALE_STRING
);
header( 'Content-Type: text/html; charset=windows-1250' );
?>
Wynik działania skryptu w systemie Windows:
Kod
Array
(
[0] => a
[1] => ą
[2] => b
[3] => c
[4] => ć
[5] => d
[6] => e
[7] => ę
[8] => f
)
Wynik działania skryptu w systemie Linux:
Kod
Array
(
[0] => a
[1] => b
[2] => c
[3] => ć
[4] => d
[5] => e
[6] => ę
[7] => f
[8] => ą
)
Przykład 3
Plik zakodowany w UTF-8:<?php
$array = array( 'a', 'b', 'c', 'd', 'e', 'f', 'ą', 'ć', 'ę' ); sort( $array, SORT_LOCALE_STRING
);
header( 'Content-Type: text/html; charset=utf-8' );
?>
Wynik działania skryptu w systemie Windows:
Kod
Array
(
[0] => a
[1] => ć
[2] => ą
[3] => ę
[4] => b
[5] => c
[6] => d
[7] => e
[8] => f
)
Wynik działania skryptu w systemie Linux:
Kod
Array
(
[0] => a
[1] => ą
[2] => ć
[3] => ę
[4] => b
[5] => c
[6] => d
[7] => e
[8] => f
)
Jak widać Windows radzi sobie z sortowaniem polskich liter, jeśli są zakodowane w
windows-1250, a Linux sobie radzi z literami zakodowanymi w
iso-8859-2. UTF-8 nie działa nigdzie...
Jeśli ktoś wie jak w miarę uniwersalnie napisać takie sortowanie, to niech się swoją wiedzą podzieli ;]