Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie UTF-8, unicode, collation, UCA
wNogachSpisz
post
Post #1





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Witam.
Zadanie jest proste.
Chce posortować tablicę zawierającą kilka elementów.
Elementami są dowone ciągi znaków w dowolnym języku zakodowanie w utf8.
Każdy element może być w innym języku.
Nie wiadomo jakie są to języki.

Wygląda na to że potrzebny jest algorytm UCA (Unicode Collation Algorithm)
http://unicode.org/reports/tr10/

Podobno nowa bibliteka wprowadzona w php 5.3 o nazwie 'ntl' potrafi to zrobić:
http://www.php.net/manual/en/book.intl.php
Konkretnie klasa Collator.
Niestety nie ma za dużo hostingów z php 5.3 - a nawet jeśli są to nie mam zamiaru się przenosić.

Jest też biblioteka PEAR:
http://pear.php.net/package/I18N_UnicodeNormalizer
Podobno za jej pomocą można sortować, niestety nie wiem jak to zrobić, nie potrafie się nią posłużyć, jestem za cieńki.

Czy ktoś zna inne sposoby?
Jeśli nie jesteś w 100% pewna/y, zanim cokolwiek napiszesz w tym temacie przeczytaj http://unicode.org/reports/tr10/ , w przeciwnym razie masz to jak w banku, że dostaniesz ode mnie zjebki :-]

Z góry dziękuję za pomoc.
Załączam gorące pozrowienia.
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Normalizowanie to proces ujednolicania zapisu tekstu w Unikodzie - ta sama litera może zostać w Unikodzie zapisana na kilka sposobów. Z samym sortowaniem niewiele ma to wspólnego, jednakże wpływa na porównywanie jako takie znaków. Normalizowanie tekstu to raczej dobra praktyka, więc możesz wykorzystać Intl do tego.
2. PHP 5.3 ma już dwa i pół roku - spokojnie możesz na nim polegać, szczególnie że większość sensownych narzędzie dla PHP i tak wymaga PHP 5.3+.

W skrócie: użyj Collatora, to najlepsze rozwiązanie.
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 - 15:17