Nahlédněte i do Diskuse pod čarou!

Poskytování českých stránek

Úvodem bych rád upozornil na článek Jana Schmidta věnovaný téže problematice.

Rovněž bych vás, jako autora WWW stránek, chtěl požádat o dodržování jakýchsi pravidel slušného poskytování WWW. No a teď už konečně můžeme přistoupit k vlastním možnostem poskytování českých stránek.

Proč nepoužívat opisné sekvence HTML?

Předpokládám, že již znáte jazyk HTML, a proto asi víte, že jedním z jeho rysů je schopnost vyjádřit speciální znaky pomocí sekvencí složených z ASCII znaků.

[Tabulka zarovnaná v ASCII] Příklad použití opisných sekvencí a jejich interpretací vaším browserem.
Sekvence Interpretace vaším browserem Osmibitově
()
Význam
á á á a s čárkou
é é é e s čárkou
č č č c s háčkem
Ř Ř Ř R s háčkem

Doufám, že vám z těchto ukázek vyplynulo, že používat tyto opisné sekvence je prakticky skokem do propasti, o níž nikdy nevíte, jak bude hluboká a co se vám na dně ukáže. Problémy vyplývají pravděpodobně z toho, že jsou tyto sekvence odrazem především němčiny a francouzštiny a na jiné jazyky většina klientů vůbec nepamatuje... (Jediný browser, který tohle snad umí, je lynx respektive lynx pro MS-DOS a Windows 95/NT.)

Osmibitové znaky

Naštěstí tvůrci HTTP protokolu pamatovali na potřebu přenášet i kódy speciálních znaků (zabírajících všech osm bitů jednoho bytu), takže je možné předkládat dokumenty psané v plnohodnotné češtině, otázkou již zbývá vyřešit je jen rozhodnutí, jaká kódování podporovat a kdy dokument překládat.

Nejjednodušší by bylo poskytovat stránky v jediném kódování, tak jak jsou uloženy na serveru. V tomhle případě by totiž vůbec nebylo třeba uvažovat o CGI-skriptech, modulech nebo jiných démonech. Situace v českém WWW však stále ještě není dostatečně zralá na podobné sjednocení - dosud je stále velmi významné umět poskytnout i alternativu bez diakritiky, neboť zdaleka ne všechny programy a platformy se mohou s češtinou vyrovnat, a celá používá se stále celá řada programů, které neumějí zobrazit než kódování vlastní platformy. Pokud by nakonec mělo opravdu dojít k naznačenému sjednocení znakové sady používané na českém Internetu, velmi důrazně prosazuji ISO-8859-2. Proč právě ISO-8859-2?!

Jste-li rozhodnuti nabízet svým čtenářům výběr z několika možných kódování, musíte si podle možností Vašeho WWW serveru zvolit jeden ze tří základních způsobů překládání dokumentu.

Ještě než zabloudíte do dalších stránek, projděte si obecné shrnutí na konci této stránky!

1. Moduly do http serverů

Tohle řešení je nejelegantnější - nemusíte se starat vůbec o nic a modul zašitý do kabátu vašeho serveru každou stránku i každý uživatelský CGI-skript na výstupu převádí do požadovaného kódování češtiny.

Odkazy na zajímavé moduly naleznete zde.

2. Překladové CGI-skripty

Tohle řešení je poněkud starší, ale je-li použit inteligentní CGI-skript, shoduje se chování takového serveru téměř úplně s chováním serveru s nějakým češtinovým modulem. Na serverech, kde nelze z nějakého důvodu použít modul je CGI-skript vhodnou alternativou. (U starších serverů může použití překladového CGI-skriptu přinést i další výhody, např. umožní ještě dodatečné úpravy dokumentu za letu, podobně jako to u nových serverů dovolují Server-Side Includy - příkazy pro server přímo v HTML dokumentech.)

Nedostatkem použití CGI-skriptu je částečné prodloužení doby potřebné pro poskytnutí dokumentu (skript se musí pokaždé spustit, kdežto modul běží stále) a nemožnost uskladnění dokumentů do proxy cache (výstup z CGI-skriptu není uskladňován nikdy). Drobnou vadou na kráse je rovněž mnohdy značné prodloužení URL, kterou se na dokument odkazujete.

Snad přehledné srovnání CGI-skriptů naleznete zde.

3. Statická řešení

Vůbec nejstarší a nejméně technicky náročné řešení je založeno na uskladnění téhož dokumentu v několika mutacích znakových sad. Na rozdíl od CGI-skriptů zde opět nedochází k zbytečným prodlevám při přenosu a dokumenty se do proxy cache dostat mohou, na druhou stranu jsou několikanásobně zvýšeny nároky na diskovou kapacitu.

Několik rad, jak statické řešení realizovat, je k dispozici zde.

Obecné zvyklosti poskytování českých stránek

Označení znakové sady každé stránky

Pokud o vaši stránku někdo požádá (ať ji už poskytujete jen pomocí serveru, přes nějaký modul, nebo CGI-skript), musí se nutně dozvědět, v jakém kódování stránku obdržel. Znakovou sadu stránky lze označit v zásadě dvěma způsoby: buď v hlavičce HTTP protokolu, nebo ekvivaletním označením uvedeném v HTML příkazu <META>.

Ve shodě s MIME se používá pole hlavičky, do něhož se přiřadí rozšiřující atribut s MIME názvem znakové sady, v níž je dokument kódován:

Content-type: text/html; charset=něco

Zásah do HTTP hlavičky zvládají moduly do serverů i CGI-skripty. Při poskytování stránek staticky však řádku vypíše sám server, aniž by do ní atribut o kódování přidával. Pro označení znakové sady dokumentu tedy musíte použít cestu náhradní, uvést ekvivalent označení přímo v HTML dokumentu, nejlépe hned na jeho začátku, rozhodně však ještě v jeho hlavičce (<HEAD>). Správný zápis tohoto speciální příkazu vypadá takto:

<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=něco">

Opět je zde užit MIME název znakové sady. Při poskytování stránek staticky musí být v každé mutaci dokumentu tento název shodný se skutečným kódem mutace. Právě potřeba uvedení MIME názvu může být při automatickém převodu problémem, neboť konverzní programy nemusí do obsahu překládaných stránek zasahovat vůbec, nebo mohou používat názvy odlišné od MIME.

Největší chybou, ke které může dojít, je uvedení:

Požadavek klienta o konkrétní znakovou sadu

Čtenář českých stránek mívá několik možností, jak požádat o konkrétní znakovou sadu.

Informace v URL

První možností je začlenění názvu sady přímo do URL požadovaného dokumentu - při statickém řešení je odlišné URL odlišných mutací téhož dokumentu nutností, z URL však často čerpají potřebou informaci i CGI-skripty nebo češtinové moduly. Označení znakové sady je však v URL uloženo dost specifickým způsobem - záleží na každém programu na straně serveru, co v URL bude hledat. Zde je několik příkladů požadavků o totéž kódování, pokaždé však na odlišný překládací program:

Cookies

Jinou možností je použití tzv. cookies - koláčků, které si server uloží u klienta. V praxi to funguje nějak takhle: přijdete na nějaké WWW stránky a vidíte je v ošklivé češtině. Najdete si proto možnost volby kódování a zvolíte něco, co vám vyhovuje lépe. Server v tu chvíli požádá váš prohlížeč, aby někam na váš disk uložil informaci o tom, že právě vám vyhovuje právě tohle kódování. Příště, až na stránky přijdete, se server zeptá vašeho prohlížeče: Nemám u tebe nějaký koláček? a jako odpověď dostane informaci o kódování, které máte nejraději.

Mnoha lidem tento způsob nevyhovuje z principu: má snad server právo zasahovat do obsahu mého disku? Koláčky obecně mohou např. zabírat zbytečné místo na disku, zvlášť, když by každá česká stránka jeden přidala. (Nevím o žádných pokusech o standardizaci koláčků oblíbené znakové sady.)

Informace v HTTP hlavičce

Jedná se o způsob nejlepší, v současné době ho podporují snad všechny nové CGI-skripty a všechny moduly do serverů. Vychází totiž ze zavedených zvyklostí protokolu HTTP. Již v první definici tohoto protokolu se objevil způsob, jakým může klientský prohlížeč požádat o stránku v určité jazykové mutaci - browser v hlavičce uvede požadavek:

Accept-Language: cz, sk, en;q=0.7, de;q=0.3

Tento požadavek znamená: předej mi stránku česky, nemůžeš-li, zkus tedy slovenštinu, pokud ani ta nebude dostupná, umím ještě docela obstojně (na 70 %) anglicky a poměrně mizerně (na 30 %) německy.

Obdobně tedy může klientský browser požádat o určitou mutaci kódování dokumentu:

Accept-Charset: iso-8859-2, windows-1250;q=0.7, us-ascii;q=0.5

Chytrý server (byv vybaven češtinovým modulem nebo řízen CGI-skriptem), převede požadovanou stránku do požadované mutace.

Problémem je při použití tohoto způsobu požadavku o specifické kódování, jak přesvědčit klientský program, aby si o určitou znakovou sadu říkal. Tento požadavek lze nastavit v lynxu (nebo lynxu pro DOS) a možná ještě několika málo dalších klientech. Ostatní programy k tomu přinutit moc nelze a např. Netscape Communicator v. 4 si vždycky žádá o kódování ISO-8859-1 (pro češtinu nevyhovující), takže ho taky dostane...

Vzhledem ke skutečnosti, že požadavek Accept-Language ve většině programů nastavit lze, uvažoval jsem rovněž o možnosti vytvořit falešná jména jazyků, např. cz-ISO-8859-2, cz-apple-ce. Jednalo by se však opět o jakési flikování toho, co už má svou uzákoněnou cestu, takže je asi lepší počkat, až se možnost nastavení Accept-Charset rozšíří. Pokud máte přesto zájem, informace o současném stavu této cesty naleznete v popisu MIME

Teď už víte téměř všechno o tom, tak stránky v háčkované češtině poskytovat. Pokud jsou vaše ambice tak vysoké (a měly by být!), že chcete háčkovanou češtinu dostávat i v odpovědích čtenářů na vaše formuláře, můžete si přečíst několik úvah na toto téma.