Oprava kódování a diakritiky pro převod phpBB

Zde najdete veškeré články portálu phpBB.cz
Odpovědět
Culprit
Příspěvky: 3744
Registrován: čtv 06. dub 2006 0:00:00
Bydliště: Praha, ČR
Kontaktovat uživatele:

Oprava kódování a diakritiky pro převod phpBB

Příspěvek od Culprit » pát 23. kvě 2008 12:45:54

Úvod
Máte problémy s kódováním při převodu svého fóra na phpBB3?
Máte problémy s exportem a importem svých dat fóra?
Špatně se vám zobrazuje diakritika v databázi za pomoci phpMyAdminu?
Přečtěte si tento návod.

Obsah
  • Kódování znaků
  • Korekce kódování
    1. Databáze a tabulky
    2. Kontrola fóra
    3. Nastavení jazykových souborů
    4. Závěr
Kódování znaků
Nejdříve se podívejme na to, co všechno ovlivňuje kódování diakritiky mezi zobrazenou stránkou a řádkou v tabulce.
  1. Kódování stránek je určováno pomocí meta tagu

    Kód: Vybrat vše

    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
  2. Kódování pro připojení k databázi je nastavováno přímo v PHP.INI nebo je možné jej změnit v rámci připojení phpBB.
    php.ini

    Kód: Vybrat vše

    default_charset = "iso-8859-1"
    Toto se nastavuje přímo při vytváření připojení k databázi. Typ připojení jste zadávali při instalaci. Pokud si jej nepamatujete, naleznete jej v config.php v proměnné $dbms.
    Změna je prováděna ve funkci sql_db, a to vykonámím příkazu:

    Kód: Vybrat vše

    mysql_query( "SET NAMES utf8");
    Tento příkaz je vhodné provádět až po připojení k databázi a vybrání příslušné databáze. Nejvhodnější je vložit až těsně před ukončení provádění této funkce:

    Kód: Vybrat vše

    mysql_query( "SET NAMES latin2");
    return $this->db_connect_id;   
  3. Kódování databázového serveru naleznete přímo na hlavní stránce phpMyAdmina pod odkazem Systémové proměnné MySQL. Jedná se o nastavení těchto hodnot:
    • character set client
    • (Globální hodnota)
    • character set connection
    • (Globální hodnota)
    • character set database
    • character set filesystem
    • character set results
    • (Globální hodnota)
    • character set server
    • character set system
    • collation connection
    • (Globální hodnota)
    • collation database
    • collation server
    V případě že některá dvojice bude vysvícena jinou barvou, jejich hodnoty se liší. Různé dvojice mohou mít různé hodnoty, ale v nastavení proměnných by neměly být vysvíceny jinou barvou.
  4. Kódování tabulek a jednotlivých textvových sloupců tabulek. Tato nastavení naleznete přímo v seznamu tabulek nebo v náhledu struktury tabulky.
Korekce kódování
0) Než začnete
Nainstalujte si lokálně web server, MySQL, PHP a phpMyAdmina; nejlépe pomocí nějakého balíku, který obsahuje webserver, mySQL a PHP.

1) Oprava kódování v databázi a tabulkách
Vytvořte si databázi, do které budete nahrávat vyexportovaná data, a nastavte jí správné kódování. Nejvodnější kódování bude UTF-8.
Jděte do administrace svého fóra a vyexportuje si strukturu databáze; nejlépe bez informací o nastavení collation a default charset. Následně ji naimportujte do své lokální databáze na lokálním stroji.

Nyní si stáhněte přiložený soubor, který Vám vyexportuje všechna data z Vašeho fóra.
sql_dump.php (zip soubor)
Nahrajte jej do hlavního adresáše fóra.
Přejděte v prohlížeči na domovskou stránku vašeho fóra a nahradtě v adrese index.php za sql_dump.php, program Vám vyexportuje všechna vaše data do souboru, tabulky pro vyhledávání nejsou exportovány.
Vyexportovaný soubor by měl být v kódování UTF-8. Prohlédněte jej v nějakém editoru, který umí zobrazit soubor v kódování UTF-8. Měli byste vidět diakritiku správně.
V případě že kódování diakritiky není správné, nastavte v souboru sql_dump.php stejné kódování, jako je kódování tabulek a položek v tabulkách, a proveďte sql_dump.php znovu.
Příklady:

Kód: Vybrat vše

header('Content-Encoding: latin2');
header('Content-Encoding: iso-8859-2');
header('Content-Encoding: utf-8');   
V souboru byste měli mít vyexportovaná data se správnou diakritikou.
Nyní naimportujte výsledný vyexportovaný soubor do databáze.
  1. Pomocí phpMyAdmina si poté prohlédněte naimportovaná data, zdali se správně zobrazuje diakritika. Pokud se diakritika správně nezobrazuje, vymažte všechny záznamy z tabulek.
  2. Pomocí příkazového řádku:

    Kód: Vybrat vše

    mysql -h localhost -u [uživatel] -p[heslo] [databáze] --default-character-set=[kódování diakritiky v souboru] < [vyexportovaný soubor]
    Opět zkontrolujte správnost diakritiky pomocí phpMyAdmina.
Nyní byste měli mít na lokálním stroji databázi se správně se zobrazující češtinou.

2) Kontrola fóra
Nyní zprovozníme vaše fórum lokálně.
Zkopírujte si své fórum z FTP lokálně do adresáře webového serveru. Upravte config.php, kde přepíšete hodnoty pro připojení do DB.

Kód: Vybrat vše

$dbhost = 'localhost';
$dbname = '[databáze]';
$dbuser = '[uživatel]';
$dbpasswd = '[heslo]';   
Ostatní proměnné by se neměly změnit.
Smažte obsah složky cache.
Otevřete v phpMyAdminu tabulku phpbb_config. Najdete řádky s server_name a script_path. Server_name nastavte na localhost a script_path nastavte absolutní cestu ke skriptům od kořene webu.
Nyní byste měli mít lokálně funkční fórum se správnou diakritikou v DB.
V jazykových souborech nastavte správné kódování, stejné jako je kódování v DB (UTF-8).

Kód: Vybrat vše

$lang['ENCODING'] = 'utf-8';   
Nyní v prohlížeči si prohlédněte své fórum uložené lokálně. Příspěvky, názvy fór a samotné texty by měly být správně zobrazeny.
Pokud nejsou zobrazeny správně české znaky, je nutné opět nastavit správné kódování pro připojení k DB.

Kód: Vybrat vše

mysql_query( "SET NAMES utf8");
return $this->db_connect_id;   
Pokud nejsou, měli byste začít znova s jiným nastavením kódování.
3) Kódování jazykových souborů
Stáhněte si správné jazykové soubory ve správném kódování a nahrajte je do příslušných adresářů fóra. Slaďte kódování všech jazyků; pokud jen jeden jazyk bude v jiném kódování, ostatní uživatelé používající jiný jazyk nebudou mít správně zobrazenou diakritiku.

4) Závěr
Naučte se celý postup tak, abyste jej mohli provést bezchybně a automaticky.
Poté jej budete moci provést přímo na vašem fóru uloženém na hostingu.
Až jej budete převádět "naostro", nebudete měnit hodnoty v DB ani v config.php

Doporučení
Až budete vytvářet tabulky na svém hostingu, upravte nejdříve soubory se strukturou DB a daty.
Nahraďte phpbb_ třeba za phpbb2_.
Poté vše naimportujte, zkontrolujte diakritiku v DB, upravte jazykové soubory a posléze v config.php změňte

Kód: Vybrat vše

# -- NAJDI
$table_prefix = 'phpbb_';
# -- NAHRAD
$table_prefix = 'phpbb2_';   
Nakonec smažte obsah složky cache.
Od této chvíle by vám mělo fórum běžet na nových tabulkách.
«Přečtu si informace o instalaci fóra a jeho komponent» «Podívám se po webu, jestli to někde nebylo řešeno» «Umím li něco z dané oblasti problému, pokusím se vyřešit sám» «Zeptám se podpory» «Neurguji podporu»

Odpovědět