Diakritika - teorie

Diskuse výhradně o phpBB2.
Pravidla fóra
Dnem 1.1.2009 oficiálně skončila podpora pro phpBB2. Bezpečnostní aktualizace budou vydávány jen do 1.2.2009. Proto doporučujeme co nejrychleji přejít na aktuální verzi phpBB3, která je ke stažení zde nebo zde.
ameeck
Příspěvky: 6425
Registrován: ned 06. lis 2005 1:00:00

Diakritika - teorie

Příspěvek od ameeck » ned 19. úno 2006 13:48:44

Článek napsal drake127:
Jelikož se tu množí otázky na to, jak přesunout fórum tak, aby fungovalo, rozhodl jsem se, že odpovím trochu obecněji. Předesílám, že nepíšu postup krok za krokem, takže vaše samostudium a pochopení problematiky je stále nutné.

Nejdříve si musíte zjistit, v jakémže to kódování vlastně své fórum máte. Naneštěstí většina z vás pouze zkopíruje složku lang_czech/ a tím skončí. Proč je to špatně? Nejdříve ta méně důležitá věc - špatně se odesílá předmět e-mailů (Nov? soukrom? zpr?va). Další a o mnoho důležitější problém, nastává, pokud máte databázi MySQL 4.1 (a vyšší). Tato totiž používá pro ukládání znaků svoji vlastní reprezentaci dat a tudíž potřebuje vědět, v jakémže kódování jí data posíláte.

Zjistit to ale nejdřív musíte vy - pokud si už nepamatujete, jakou češtinu jste si stáhli (Bylo by snažší, kdyby se přestala podporovat Windows-1250), zjistíte to snadno v souboru lang_main.php, řádek $lang['ENCODING'] = '...';.
Nyní už "své" kódování znáte a já dále budu zmiňovat pouze UTF-8. Ti z vás, kteří si zvolili (kdo ví proč) Windows-1250, nechť si v duchu nahradí UTF-8 za Windows-1250 a utf8 za cp1250.

Dále musíte nutně zjistit, jakou máte verzi MySQL. Toto zjistíte snadno na první stránce phpMyAdminu po přihlášení. Jelikož MySQL 4.0 (a nižší) přistupuje k datům hezky byte po bytu,v databázi máte uloženo přesně to, co pošlete a o vlastní konverzi se musíte postarat sami *). MySQL 4.1 se naopak velmi zajímá o formát posílaných dat, takže po navázání spojení musíte oznámit, v jakém kódování si chcete povídat **).

Nyní považuji za nutné zmínit ještě jednu podmínku správně fungujícího fóra - všechny nainstalované jazyky musí používat stejné kódování, jinak hrozí katastrofa - stačí jediný uživatel, který si usmyslel používat angličtinu a následný chaos v databázi budete muset opravovat ručně! Naštěstí pro vás si zmíněný uživatel rychle všimne, že je něco špatně a od svého anglického rozhraní upustí. Přesto (a nebo spíše právě proto) odhaduji počet takto špatně nastavených fór na 95 %.

Nyní přejdeme na chvíli k praxi - jak databázi oznámit, v jakém kódování jí data posílám a jak vyřešit zmíněný problém s e-maily?
http://www.phpbbcz.com/viewtopic.php?t=2434

To, co jsem zmínil výše (a také v odkazu) je správně nastavené fórum. Ovšem přece bych nečekal, že všechno bude tak, jak má, že?

Problém č. 1: Mám MySQL 4.1 (a výše) a na úpravu db/mysql4.php jsem se vykašlal.
Nastávají dvě možnosti. Váš správce udělal systém blbuvzdorný (pravděpodobně s velkým sebezapřením a z rozkazu svého šéfa ("udělej to tak, ať si nestěžujou")), takže je vlastně všechno v pořádku. Poznáte to tak, že po přihlášení do phpMyAdmina se vám v příspěvcích zobrazuje diakritika správně (na otestování je ideální tabulka *_posts_text).
Druhá (o poznání horší) varianta je ta, že je diakritika rozhozená. Potom musíte databázi vyexportovat, opravit kódování tak, abyste opět viděli smysluplné znaky (buď přeuložením nebo starou dobrou metodou Najdi/Nahraď), a správně naimportovat zpět. Zdůrazňuji slovíčko správně, protože v phpMyAdminu je možnost/nutnost vybrat použité kódování importu. Že jste toto provedli správně zjistíte tak, že se vám diakritika v databázi zobrazí tak, jak má.
V obou případech je poslední krok znovu nezapomenout na úpravu db/mysql4.php.

Problém č. 2: Používám MySQL 4.0 (a nižší) a diakritika (příspěvků) je podivná.
V MySQL 4.0 (a nižší) je kódování příspěvků v databázi spojeno s kódováním fóra. Proto, když změníte kódování fóra, máte problém, který vyřešíte podobně jako předchozí případ (export, úprava, import) s tím rozdílem, že se kódování importovaného souboru musí shodovat s kódováním fóra (všimněte si, že v MySQL 4.1 toto neplatí).

Problém č. 3: Přesun fóra.
Toto je pouze určité shrnutí předchozích dvou případů. Musíte si uvědomit, z jaké verze MySQL vycházíte a do jaké verze vkládáte. Jinak je situace totožná jako v případě opravy (zálohy).


Pokud jsem něco nevyložil dostatečně jasně a něčemu nerozumíte, neváhejte se ozvat (termín nerozumíte jsem zvolil úmyslně - pokud jen nevíte, jak něco udělat a chápete, co máte udělat, není problém si tuto informaci vyhledat v manuálu nebo dokumentaci).


*) Z textových editorů, které toto zvládají bez chyby, mohu jmenovat pouze jEdit s plnou podporou unicode (narozdíl třeba od PSPadu). Jeho ovládání je poněkud krkolomnější, ale věřím, že po chvíli zjistíte, jak měnit kódování češtiny.
**) Fakt, že to na některých hostinzích funguje samo od sebe je ten, že správci očekávají, že lidé, kteří pracují s Windows-1250 si toto nastavit neumějí a proto raději zvolí Windows-1250 jako výchozí kódování, aby se vyhli nekonečným otázkám proč že to nefunguje. Nicméně na to nelze v žádném případě spoléhat!



Děkuji uživateli drake127 ze serveru phpbbcz.com za poskytnutí článku, Ameeck

invalid user
Příspěvky: 2913
Registrován: čtv 01. led 1970 2:00:00

Příspěvek od invalid user » stř 15. lis 2006 23:59:13

Tak v¹e jsem pochopil a¾ na "nech» si v duchu nahradí UTF-8 za Windows-1250 a utf8 za cp1250" ne¹lo by to tro¹ku objasnit, pou¾íval jsem cp1250

invalid user
Příspěvky: 2913
Registrován: čtv 01. led 1970 2:00:00

Příspěvek od invalid user » pon 27. lis 2006 10:50:13

Mam to chapat tak, ze ked som pouzival na starom fore windows-1250 tak nie je mozne spravne vyexportovat databazu do noveho fora? Lebo pokial dam export priamo v SQL alebo v admin menu PHPBB fora, nikdy tam nezobrazi spravne diakriticke znaky.

ameeck
Příspěvky: 6425
Registrován: ned 06. lis 2005 1:00:00

Příspěvek od ameeck » pon 27. lis 2006 15:37:17

lhman píše: Mam to chapat tak, ze ked som pouzival na starom fore windows-1250 tak nie je mozne spravne vyexportovat databazu do noveho fora? Lebo pokial dam export priamo v SQL alebo v admin menu PHPBB fora, nikdy tam nezobrazi spravne diakriticke znaky.

Můžeš, akorát pak budeš muset upravit soubor db.php a přidat tam mysql dotaz aby spojení probíhalo pdo kodovaním cp1250(Windows-1250), ta uprava je v poslednim clanku na indexu dole...

invalid user
Příspěvky: 2913
Registrován: čtv 01. led 1970 2:00:00

Příspěvek od invalid user » pon 05. úno 2007 15:48:00

Ahoj.
Vim, ze se s diakritikou porad bojuje a ja uz myslel, ze jsem to pochopil...ale.
Stahl jsem si z phpbb.com verzi 1.1.22 a k tomu hned cestinu (byla hned na te same strance, tak jsem usoudil, ze patri k tehle verzi).
Zalozil jsem novou databazi v kodovani Windows-1250. Pak nainstaloval phpbb s tou stazenou cestinou. Pak jsem se teda kouknul do "lang_main.php", coze tam mam za kodovani. Fajne...Windows-1250. Ale znaky nesli...tusim ¹ a ¾.
Dobra. Vse jsem smazal. Zalozil databazi s UTF kodovanim a vse znova nainstaloval (vcetne te same cestiny). A ted vse funguje. Neni divne, ze mam databazi v UTF a cestinu v 1250 a vse funguje? Nemuze nastat nekdy nejaky kolaps nebo problem.
Jo...jinak poznamka...mam to zatim na localu.
Dik za info

Zamčeno