Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
tsharek
post
Post #2





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

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


spróbuj
  1. <?php
  2. setlocale(LC_CTYPE, 'pl_PL.UTF8');
  3. ?>


--------------------
Go to the top of the page
+Quote Post
kufalo
post
Post #3





Grupa: Zarejestrowani
Postów: 251
Pomógł: 2
Dołączył: 24.08.2005

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


  1. <?
  2.  setlocale(LC_CTYPE,'pl_PL.UTF8');
  3.  
  4.  $a=array('ę','ą','z');
  5.  
  6.  sort($a);
  7.  
  8.  print_r($a);
  9. ?>

Z ciekwawosci stworzylem plik jak powyzej zapisany w stronie kodowej UTF-8.
Niestety nie sortuje prawidlowo.
Go to the top of the page
+Quote Post
piernik
post
Post #4





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

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


niente :/nie działamam rozumieć ze tego w php się nie da zrobić questionmark.gifexclamation.gif
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #5





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Cytat(piernik @ 4.09.2007, 05:17:24 ) *
mam rozumieć ze tego w php się nie da zrobić ?

Da się. Zwróć uwagę na drugi paramter funkcji sort" title="Zobacz w manualu PHP" target="_manual.
  1. <?php
  2. setlocale(LC_ALL,'pl_PL.UTF8');
  3. $a=array('ę','ą','z');
  4. sort($a, SORT_LOCALE_STRING);
  5. print_r($a);
  6. ?>

Output:
Cytat
Array
(
[0] => ą
[1] => ę
[2] => z
)


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
piernik
post
Post #6





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

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


Niestety nie działa zarówno na localhoście jak i na serwerze (home.pl) czy wymagane są jakies dodatkowe ustawienia serwera?
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #7





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


"Dodane w PHP 4.4.0 i PHP 5.0.2"


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
piernik
post
Post #8





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

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


Ja mam 5.1.5
Go to the top of the page
+Quote Post
Sh4dow
post
Post #9





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


Jest prawdopodobieństwo żeby nie miał ustawionych lokali na serwerze ? zobacz co zwraca setlocale jeśli zwróci to co próbujesz ustawić to powinno działać, jak nie to nie masz zainstalowanych locali na serwerze.


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
piernik
post
Post #10





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

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


Dostałem taką odpowiedź z home.pl:
"Obawiam sie, ze locale nie sa na chwile obecna dostepne z poziomu uzytkownika - przepraszam Pana za umiarkowanie pozyteczna sugestie. "

Nieźle :/ lider na rynku :/
Go to the top of the page
+Quote Post
sf
post
Post #11





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Cytat(piernik @ 11.09.2007, 07:55:10 ) *
Dostałem taką odpowiedź z home.pl:
"Obawiam sie, ze locale nie sa na chwile obecna dostepne z poziomu uzytkownika - przepraszam Pana za umiarkowanie pozyteczna sugestie. "

Nieźle :/ lider na rynku :/


Ja w takich sytuacjach piszę dlaczego ta usługa jest ważna, żyjemy w Polsce i brak wsparcia do operacji na polskich znaków wydaje mi się niestosowny i przykry. Ogólnie bardzo się rozczulam dlaczego płacę najwięcej na rynku, a dostaje zdecydowanie mniej niż na innych hostingach. Proszę o kontakt jakiś z górą czy coś. Jeśli nic nie pomaga to stwierdzam, że przykro mi, ale dziękuje za tego typu usługę i przenoszę konta klientów po wygaśnięciu abonamentu do innej firmy hostingowej winksmiley.jpg

Ten post edytował sf 11.09.2007, 08:39:03


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
piernik
post
Post #12





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

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


ok jednak jest dostępne locale na home.pl, ale...

  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. $a=array('a','b','ę','ą','ś','c','z');
  4. setlocale(LC_ALL,'pl_PL.UTF-8');
  5. sort($a, SORT_LOCALE_STRING);
  6. print_r($a);
  7. ?>


wynik sortowania:
a, b, c, z, ą, ę, ś

Odpowiedź z home.pl
"Wyniki sortowania wg. konkretnego locale nijak sie maja do kolejnosci znakow w alfabecie. Wyniki ktore Pan otrzymuje, sa poprawne dla wybranego kodowania."

To jak ja to mam posortować :|
Go to the top of the page
+Quote Post
Kicok
post
Post #13





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


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
zimi
post
Post #14





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


co tu dużo gadać: usort" title="Zobacz w manualu PHP" target="_manual i napisać funkcję porównującą...
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 16:11