Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie tablic w UTF8
piernik
post
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 9.07.2004

Ostrzeżenie: (0%)
-----


Witam,

chcę posortować tablicę, którą mam w utf8.
sort sobie nie radzi bo polskie krzaczki lądują na końcu.
Jest jakis sposób to posortować poprawnie?

PS. nie chodzi tylko o język polski tekże wypisanie wszystkich polskich krzaczków w kolejności i posotrowanie zgodnie z tym odpada
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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:

  1. <?php
  2.  
  3.  
  4. setlocale( LC_ALL, 'polish' );
  5.  
  6. $array = array( 'a', 'b', 'c', 'd', 'e', 'f', 'ą', 'ć', 'ę' );
  7. sort( $array, SORT_LOCALE_STRING );
  8.  
  9.  
  10.  
  11.  
  12. header( 'Content-Type: text/html; charset=iso-8859-2' );
  13.  
  14. echo '<pre>' . print_r( $array, true ) . </pre>;
  15.  
  16. ?>

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:

  1. <?php
  2.  
  3.  
  4. setlocale( LC_ALL, 'polish' );
  5.  
  6. $array = array( 'a', 'b', 'c', 'd', 'e', 'f', 'ą', 'ć', 'ę' );
  7. sort( $array, SORT_LOCALE_STRING );
  8.  
  9.  
  10.  
  11.  
  12. header( 'Content-Type: text/html; charset=windows-1250' );
  13.  
  14. echo '<pre>' . print_r( $array, true ) . '</pre>';
  15.  
  16. ?>

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:

  1. <?php
  2.  
  3.  
  4. setlocale( LC_ALL, 'polish' );
  5.  
  6. $array = array( 'a', 'b', 'c', 'd', 'e', 'f', 'ą', 'ć', 'ę' );
  7. sort( $array, SORT_LOCALE_STRING );
  8.  
  9.  
  10.  
  11.  
  12. header( 'Content-Type: text/html; charset=utf-8' );
  13.  
  14. echo '<pre>' . print_r( $array, true ) . '</pre>';
  15.  
  16. ?>

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 ;]

Ten post edytował Kicok 13.09.2007, 17:19:29
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 12:27