Č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
Diakritika - teorie
-
- Příspěvky: 2913
- Registrován: čtv 01. led 1970 2:00:00
-
- Příspěvky: 2913
- Registrován: čtv 01. led 1970 2:00:00
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...
-
- Příspěvky: 2913
- Registrován: čtv 01. led 1970 2:00: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
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