| Autor | Zpráva | ||
|---|---|---|---|
| gaminn Profil * |
#1 · Zasláno: 17. 7. 2006, 22:56:58
Zdravím,
mám problém s českým seřazením pole, nepomáhá ani různé nastavení setlocale() (locale se sice nastaví (zjistím pomocí localeconv()), ale nemá vliv na řazení), echo 'č'>'e'?1:0; stále vypisuje 1, pole se vždy seřadí tak, že položky začinající na písmeno s diakritikou jsou na konci seznamu. Používám kódování UTF-8, ale řazení nefunguje ani ve WIN-1250. Mám PHP 5.1, Apache 2 a Win XP. Nevěděl by si někdo rady? |
||
| mila Profil |
#2 · Zasláno: 18. 7. 2006, 00:15:05
Php všeobecně nezvládá utf8 (obecně multibyte kódování).
Hledej mb string. |
||
| anode Profil |
#3 · Zasláno: 18. 7. 2006, 00:53:23
|
||
| gaminn Profil * |
#4 · Zasláno: 18. 7. 2006, 11:15:19
Bohužel ani tato funkce není všemohoucí, konkrétně řadím státy světa a dostávám výsledky např:
Array ( [0] => Arménie [1] => Čína [2] => Austrálie ) - Č a Í se řadí mezi státy začínající na A + další nesrovnalosti echo strcoll('Č', 'Au'); vrací -1 echo strcoll('Č', 'A'); vrací 1 Nebo dělám něco špatně? |
||
| gaminn Profil * |
#5 · Zasláno: 18. 7. 2006, 13:33:44
Udělal jsem si takovouto funkci:
function mb_strcoll($string1, $string2) { return strcoll(iconv('UTF-8', 'WINDOWS-1250', $string1), iconv('UTF-8', 'WINDOWS-1250', $string2)); } , která již celkem funguje, bohužel ale nastal ale další problém. Pokud se v řetězci $string1 nebo $string1 objeví písmeno Å, vyskočí notice: Notice: iconv() [function.iconv]: Detected an illegal character in input string in xxx on line xxx To si opravdu iconv neumí poradit s některými písmeny? (možná to patří do nového threadu, ale snad mi bude zodpovězeno;)) |
||
| gaminn Profil * |
#6 · Zasláno: 18. 7. 2006, 13:34:17
Tím písmenem Å je myšleno A s kroužkem.
|
||
| gaminn Profil * |
#7 · Zasláno: 18. 7. 2006, 13:44:45
Problém s neobvyklými písmeny celkem vyřeší aliterace:
function mb_strcoll($string1, $string2) { return strcoll(iconv('UTF-8', 'WINDOWS-1250//TRANSLIT', $string1), iconv('UTF-8', 'WINDOWS-1250//TRANSLIT', $string2)); } Např. moje A s kroužkem je pak konvertováno na obyčejné A. |
||
|
Časová prodleva: 20 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0