UTF-8 je zamýšleno jako náhrada národních znakových stránek a jeho instalace s sebou přináší mnoho výhod jako např. možnost použití několika zcela různých jazyků na jednom fóru (angličtina, čeština, francouština, ruština) a schopnost zobrazit jakýkoliv znak, třeba i čínský. Jediné omezení je ve schopnostech písma na počítači čtenáře zobrazit tyto znaky.
Jelikož se jedná o kódování relativně nové, stále existují jisté problémy, které je třeba překonat a jeho podpora ještě není naprosto ideální. Problémy relevantní k instalaci na phpBB jsou především následující:
- Podpora UTF-8 byla přidána do MySQL ve verzi 4.1. Pokud máte starší verzi, nedoporučuji začátečníkům pokoušet se o použití UTF-8.
- phpBB špatně kóduje (resp. nekóduje) předměty e-mailových zpráv zasílaných skrz fórum.
- Abyste nezabili výhody UTF-8, musí být všechny na fóru nainstalované jazyky v kódování UTF-8 (tj. i angličtina, čeština, ruština ap.). Zde můžete narazit ve chvíli, kdy není k dispozici UTF-8 verze vašeho nestandardního jazyka.
- Pokud již máte existující fórum, které používá jiné kódování, než výchozí nastavené v databázi, musíte databázi vyexportovat a pomocí phpMyAdmina znovu naimportovat. Dejte si hlavně pozor na dodržení správného kódování a vždy zkontrolujte, zdali jsou nestandardní znaky uloženy v databázi správně. Důvod tohoto problému je ten, že phpBB používá nekorektní přístup k databázi.
Následuje popis instalace jakým byste měli docílit správné a bezproblémové použití UTF-8:Otevřete soubor
./db/mysql4.php. V něm najdětě
Kód:
$dbselect = mysql_select_db($this->dbname);
if( !$dbselect)
{
mysql_close($this->db_connect_id);
$this->db_connect_id = $dbselect;
a nahraďte ho následujícím.
Kód:
$dbnames = substr(mysql_get_server_info($this->db_connect_id), 0, 3) > '4.0' ? mysql_query('SET CHARACTER SET utf8', $this->db_connect_id) : true;
$dbselect = mysql_select_db($this->dbname, $this->db_connect_id);
if( !$dbselect || !$dbnames )
{
mysql_close($this->db_connect_id);
$this->db_connect_id = false;
Uložte změny a zavřete soubor.
Otevřete soubor
./includes/emailer.php. V něm najdětě (celkem 3×)
Kód:
, $this->subject
a nahraďte následujícím
Kód:
, "=?UTF-8?B?" . base64_encode($this->subject) . "?="
Uložte změny a zavřete soubor.
Nyní již jen stačí stáhnout a nainstalovat příslušné jazykové verze. Čeština a angličtina je dostupná na těchto stránkách v příslušné
sekci. Dejte pozor, ať si opravdu stáhnete UTF-8 verzi.
Tento návod byl sestaven za pomoci lidí, kteří na tento problém narazili a pomohli mi ho také vyřešit. Jmenovitě RNA a cosh-boy.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=2434To, 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!