HTML v příkladech

14

Čeština na stránkách

 
Obsah

Rejstřík

Hledat

Dopis autorovi

...devátá část nemá příklad...

Většina počítačových služeb má problémy s neanglickými jazyky. Kolébka počítačů a hlavní motor jejich rozvoje je v USA, kde se zdá zcela přirozené, že lidé hovoří a píší anglicky. Zájmy jiných jazyků, používajících písmena s háčky, čárkami, přehláskami a dalšími přívěsky, zpravidla přicházejí ke slovu až ve druhé vlně.

Prosazovat tato pitoreskní písmena do prostředí heterogenní sítě je úkol téměř nadlidský, protože jsou do ní zapojeni uživatelé s nejrůznějšími počítači, operačními systémy a programy. Klasickým příkladem je elektronická pošta, v níž většina české korespondence dodnes postrádá háčky a čárky. Kdykoli se někdo pokusí prosadit v obecných diskusních skupinách jejich používání, bývá striktně odmítnut. Přitom metoda pro přenos češtiny elektronickou poštou (MIME) je známa již od počátku devadesátých let a o implementace také není nouze.

WWW a české znaky

Ve Webu byl vývoj podstatně rychlejší. Příčina spočívá nepochybně v tom, že WWW je především nástroj na šíření textů. Jejich omezení na písmena anglické abecedy je při seriózním použití neakceptovatelné a proto se velmi rychle začaly hledat cesty, kterými dostat české znaky ke čtenáři stránky v nepoškozené podobě.

WWW navíc neklade z technického hlediska výraznější odpor. Protokol HTTP je osmibitový a bez problémů přenáší znaky s kódem větším než 127 (což jsou právě kýžená písmena se speciálními ozdobami). Také HTML se nebrání tomu, aby se ve zdrojovém textu vyskytly.

Nejsou však zcela bez práce. Jako implicitní kód pro WWW stránky byl přijat ISO 8859-1 (zvaný též ISO Latin 1). Ten obsahuje speciální znaky pro jazyky západní Evropy (němčina, francouzština, skandinávské jazyky a podobně). Pro nás v něm leccos schází (například háčkovaná písmena). Pro české stránky tedy musíme použít jiný kód.

A rázem jsme v problémech. Jednotné kódování českých znaků bohužel neexistuje. Jiné kódy jim přiděluje mezinárodní standard ISO 8859-2 (ISO Latin 2), který je zpravidla používán v operačních systémech typu Unix, jiné kódy používají MS Windows na své kódové stránce 1250 (hořkou ironií je, že od ISO 8859-2 se liší jen v několika málo českých znacích), jiné kódy má MacOS počítačů Apple a ještě jiné najdete v systému OS/2 (kódová stránka 852, zvaná též PC Latin 2). Navíc všechny zmíněné systémy přišly s češtinou mnohem později, než jsme ji na svých počítačích potřebovali. Proto jim předcházely některé tuzemské produkty, z nichž se nejvíce rozšířil kód bratří Kamenických. Leckde žije dodnes (například já v něm píši veškeré své texty).

Pokud stránku zapíšete v jednom z uvedených kódování a beze změny přepravíte ke čtenáři, uvidí ji správně jen v tom případě, že používá stejný kód. To však odporuje základní myšlence Webu, podle níž by stránky měly být srozumitelné pro všechny uživatele. Nezbývá, než kódování znaků přizpůsobit operačnímu systému uživatele. Může k němu dojít několika způsoby:

  • stránky existují v několika variantách a uživatel si vybere tu, která mu vyhovuje
  • server přizpůsobí kódování při odesílání dokumentu
  • server se o kód nestará a upraví jej až klient
Každá z uvedených variant má své výhody a nevýhody. V následujících odstavcích se je pokusím popsat.

Kód upravuje klient

Tento způsob je nepochybně nejlepší a patří mu budoucnost. V návrhu HTML verze 4.0 je doporučen jako jedině správná a de facto nezbytná cesta. Na autora stránky klade pouze dva požadavky:
  • musí zdrojový text zapsat v dostatečně standardním kódu (nejlépe ISO 8859-2, akceptovatelná je i kódová stránka 1250 MS Windows)
  • musí oznámit klientovi, který kód použil
Jelikož klient zná svůj operační systém a kódování znaků v něm, snadno si převede kód dokumentu do svého prostředí. K vyznačení kódu, kterým je zapsán dokument, poslouží protokol HTTP. Od verze 1.1 lze standardní hlavičku Content-Type doprovodit douškou charset=XXX, která řeší právě tuto úlohu. Pokud je dokument zapsán v ISO 8859-2, server by jej měl odeslat s hlavičkou
Content-Type: text/html; charset=utf-8
Pro kódovou stránku 1250 by měl použít
Content-Type: text/html; charset=windows-1250
Záleží na prostředí, v němž se stránky nacházejí, zda server dokáže příslušnou hlavičku generovat automaticky. V opačném případě se musí sám autor postarat o její náhradu pomocí značky <META>. Konkrétně pro kód ISO 8859-2 by do záhlaví dokumentu (uvnitř <HEAD>) musel uvést
<META HTTP-EQUIV="Content-Type"
      CONTENT="text/html; charset=utf-8">
Takový dokument je pak zcela soběstačný a nepotřebuje spolupráci serveru. Tuto metodu musíte použít v případě, kdy server není k dispozici (stránky z lokálního disku).

Překódování na straně klienta má řadu výhod. Klade na autora minimální nároky a přitom je velmi univerzální (kromě chápajícího klienta nepotřebuje žádné další prvky). Bez nejmenších problémů spolupracuje s vyrovnávacími pamětmi všeho druhu.

Nevýhody jeho použití spočívají především ve starých klientech. Někteří nejen neumí stránky překódovat, ale jakmile se v hlavičce Content-Type objeví charset, odmítnou dokument zobrazit (nabídnou pouze uložení na disk) nebo se dokonce zhroutí. Naštěstí procento takových muzeálních kousků rychle klesá, ale dosud není nulové.

Bohužel i někteří moderní klienti se odmítají na změně kódu podílet. Například můj Netscape Navigator 4.02 pro Unix (konkrétně IRIX) odmítá překódovat stránky z Windows 1250 do ISO Latin 2. Vzhledem k tomu, že překódování na straně klienta je prosazováno WWW konsorciem jako zcela oficiální cesta, doporučuji si na ně zvolna zvykat a začít je používat.

Kód upravuje server

Průkopnické kroky při používání českých znaků na stránkách patřily právě do této skupiny. Autor uloží dokument v nějakém kódu (buď je jednotný pro celý server nebo jej lze vyznačit v textu). WWW server jej pak při odesílání upraví podle požadavků klienta. Většina řešení vychází ze standardního mechanismu CGI programů, v poslední době se však objevilo i několik rozšiřujících modulů pro nejběžnější WWW servery. Metody z této skupiny však musí realizovat správce serveru. Na úrovni běžného uživatele zpravidla nebudete schopni instalovat potřebné programy. Navíc musíte oplývat pokročilejšími znalostmi o vašem serveru a jeho uspořádání.

Změna kódu se může odehrávat zcela automaticky. Pokud klient v dotazu pošle hlavičku Accept-Charset, server se jí přizpůsobí. V opačném případě se pokusí kód určit automaticky na základě informací z hlavičky User-Agent. V ní klient zpravidla oznámí operační systém svého počítače, z něhož ihned vyplývá potřebné kódování. Tímto způsobem pracují současné rozšiřující moduly serverů. Jsou k dispozici pro Apache i Microsoft Internet Information Server, což jsou dva nejrozšířenější programy na tomto poli.

Automatická změna kódu (zejména bez asistence Accept-Charset) však může podstatně zkomplikovat práci vyrovnávací paměti. Lokátor dokumentu zůstává stejný a proto se může stát, že uživateli odpoví vyrovnávací server (proxy cache) a pošle mu dokument ve špatném kódu.

Druhou nevýhodou je, že server v odpovědi nemusí identifikovat použitý kód. Pokud to dělá, je asi rozumnější mu ušetřit práci a použít rovnou překódování na straně klienta podle předchozí části. Když však neidentifikuje kód, klient jej může změnit, protože se mylně domnívá, že stránka používá standardní ISO 8859-1. Uživatel pak musí ručně nastavit, jak to vlastně je.

První problém odpadá, pokud změnu kódu realizuje CGI program. Pak se identifikace kódu objeví v lokátoru - například z původního

/obsah.html
se při změně kódu na ASCII stane
/cgi-bin/toASCII/obsah.html
nebo
/cgi-bin/charset/obsah.html?ASCII
Vyrovnávací paměti pak nedělá problémy odlišit jednotlivé varianty. Ovšem většina z nich neukládá cesty, které začínají /cgi-bin, takže jeden problém s vyrovnávací pamětí byl nahrazen jiným. Nezanedbatelnou nevýhodou je také zvýšená zátěž serveru a delší doba odezvy, způsobená startováním CGI programu při každém dotazu.

Z historických důvodů tento způsob realizace češtiny převládá. Domnívám se však, že bude postupně vytlačován překódováním na straně klienta. Proti němu může nabídnout jedinou výraznou výhodu, kterou je překódování do čistého ASCII (odstranění háčků a čárek). Pokud totiž uživatel nemá k dispozici písmo s potřebnými znaky, současní klienti nedovedou převést "č" na "c" a zobrazí místo něj jakýsi klikyhák.

Různé kódové verze

Třetí cesta spočívá v tom, že stránky připravíte v několika různých kódech (za pomoci patřičného programu, pochopitelně). Uživatel si pak jen vybere, o kterou verzi má zájem.

Tato cesta nevyžaduje ze strany WWW prakticky žádnou podporu. Vše se odehrává starými krotkými cestami a jedinou nadstandardní vymožeností je program, který vyrábí jednotlivé kódové verze. Pokud možno by se měl chovat inteligentně, aby například zbytečně nevyráběl několik kopií obrázků či podobné neefektivity.

Evidentním problémem tohoto řešení je větší spotřeba diskového prostoru, což však při dnešních cenách disků příliš nepálí. Horší je, že pokud zapomenete vygenerovat jednotlivé mutace, stane se obsah serveru nekonzistentním - v různých kódech obdrží uživatel různé informace. Nejnepříjemnější by bylo, kdyby někdo přišel s dalším kódováním (což se snadno může stát - například většina současných programů nepodporuje UNICODE, který se pravděpodobně bude prosazovat). Pak byste museli znovu generovat celý obsah serveru v dalším kódu.

Silnou devizou tohoto řešení je jeho bezproblémová spolupráce s čímkoli. V oblasti kompatibility je jasná jednička. Přesto se s ním v praxi příliš nesetkáte. Většina autorů zřejmě cítí, že tohle řešení je sice robustní, ale nepříliš elegantní.

Závěrečné poznámky

Značnou pohromu dokáží v českých znacích nadělat intuitivní uživatelsky přátelské HTML editory, které všechno znají a všude byly dvakrát. Některé z nich dbají na to, že znaky s kódem nad 127 by na stránkách měly být nahrazeny odpovídajícími symboly. Aniž by se ptaly na váš názor, při uložení dokumentu převedou písmeno "á" na "&aslash;" atd. Jelikož pro řadu znaků nejsou příslušné symboly k dispozici (vycházejí ze znaků kódu ISO 8859-1), nemůže to dopadnout dobře. Pokud se tato vlastnost nedá vypnout, je příslušný editor pro české texty nepoužitelný.

Druhou nepříjemností může být automatické vkládání informace o použitém kódu pomocí značky <META>. Pokud se rozhodnete používat změnu kódu na straně klienta, je tato asistence vítána. Jestliže však preferujete jiný způsob, může naopak překážet a k zajištění správné funkce musíte dotyčné značky z textu vymazávat.

Velmi obsáhlé informace o práci s češtinou v Internetu a na počítačích obecně najdete na stránce http://www.cestina.cz/. Tam hledejte i odkazy na jednotlivé programy, realizující zde popsané postupy.


Článek byl otištěn v časopise
Softwarové noviny číslo 10/97

 
<--- --->