Autor tohoto článku si klade za cíl seznámit čtenáře s programem, který se používá mimo jiné i na Webu ÚVT (www.ics.muni.cz) pro zajištění správného typu kódování stránek podle potřeb uživatelů.
Proč je něco takového nutné? K historii zavádění počítačů do českých zemí a následného počešťování se bohužel váže mnoho kódovacích standardů, ať už ISO-Latin-2, kódování bří Kamenických, KOI8-CS, Windows CP1250 či IBM CP852. Pokud tedy chceme na Webu vystavovat dokumenty s diakritikou, musíme zajistit, aby byly čitelné pro každého, ať už je to "jeho" kódování jakékoli. Také je třeba zajistit zobrazení bez nabodeníček, pokud by to uživatel potřeboval. Jednou z možností je mít na serveru kopie dokumentů ve všech podporovaných typech kódování. Tato možnost je ale velmi náročná na správu a jakékoli změny v jednotlivém dokumentu s sebou přinášejí nutnost změnit i verze v ostatních typech kódování. I v případě jisté automatizace tvorby kopií je to nezanedbatelné množství administrativní práce navíc. Také je obvykle dosti obtížné zavést nový typ kódování, pokud by taková potřeba vyvstala. Druhou možností je zařídit překódování programově, "na žádost". Tuto druhou možnost reprezentuje i CSaCzech.
CSaCzech je zkratka vzniknuvší ze slov C a SaCzech1 a znamená C-Satrapa's Czech (tedy Céčkovská Satrapova čeština). Jako jméno se ujalo kratší a výstižné "CSáček", které je použito i v dalším textu při odkazech na tento program.
Jedná se o program, který umožňuje dynamickou změnu kódování WWW dokumentů podle přání uživatele. Stránky jsou uloženy v určitém typu kódování (ne nutně jednom) a CSáček je během odesílání uživateli změní tak, aby je klient dokázal správně zobrazit.
Velmi kvalitní programy pro konverzi kódování na WWW již existují - ať je to WWWdia2 autora J.Košťála nebo již zmíněný program SaCzech od Pavla Satrapy, který byl vzorem i pro CSaCzech. Proč tedy další konverzní program? WWWdia je náročný na instalaci a údržbu a vzhledem k použitému algoritmu i pomalejší, než by mohl být, navíc nezvládá relativní odkazy. U SaCzechu je odezva s použitím překódování výrazně pomalejší než bez něj. Proto vznikl CSaCzech 1.0 jako rychlejší a méně náročný potomek SaCzechu 2.0. CSáček nyní existuje jako zcela samostatný produkt, i když zachovává kompatibilitu se SaCzechem, aspoň co se předností týče - z původního vzoru však v nynější verzi příliš nezbylo, snad jen tvar převodních tabulek spolu s názvy některých funkcí a proměnných.
CSáček byl napsán a je určen k použití na Webu jako CGI skript, používá tedy příslušné proměnné prostředí. Nelze jej proto spouštět samostatně, alespoň ne jednoduše.
Jak se tedy používá?
Stránky se píší v kódování, které odpovídá zvolenému implicitnímu kódu serveru (ve skutečnosti zdrojový kód není omezen, viz níže), a vystavují se, jak je obvyklé. Jediné, co se změní, je URL3, jímž je třeba se na stránku odkázat. Jestliže by adresa stránky byla http://kdesi/doc.html, změní se při požadavku na překódování do sedmibitového ASCII na http://kdesi/cgi-bin/toASCII/doc.html (pokud platí, že cesta ke skriptům je /cgi-bin). Tento postup ovšem předpokládá, že je známo, jaký kód bude uživatel používat, což obvykle není pravda. Proto je lepší využít skriptu whichcode, který uživateli oznámí, že cílový dokument obsahuje diakritiku, a umožní mu zvolit si "svůj" kód.
Je přirozeným požadavkem, aby si uživatel vybral kód jen jednou a při odkazech na další dokumenty z téhož zdroje se informace o zvoleném kódování uchovávala. Nejjednodušší cestou je relativní odkaz. Pokud je do dokumentu vložen odkaz pomocí značky <a href="dalsi.html">Dalsi</a>, klient doplní relativní URL dalsi.html na absolutní. Vychází přitom z URL dokumentu, v němž se značka objevila. Pokud se tedy tento dokument nacházel na URL http://kdesi/cgi-bin/toASCII/doc.html, povede výše zmíněný odkaz na http://kdesi/cgi-bin/toASCII/dalsi.html. Informace o kódu byla zachována. Absolutní odkazy je třeba řešit jinak. Do textu lze na kterékoli místo dát řetězec ISO-8859-2. Kódující skript potom každý výskyt tohoto řetězce nahradí identifikací kódu, do něhož právě převádí stránku. Jelikož jsou názvy kódů shodné s názvy používanými programy WWWdia a SaCzech, mohou se na sebe korektně odkazovat stránky, jejichž servery používají různé implementace češtiny.
CSáček je (nebojme se to přiznat) výběrový. Kóduje jen soubory s určitými příponami (implicitně .html, .htm, .txt, .cz a .shtml). Dostane-li k překódování soubor s jinou příponou, odmítne se akce zúčastnit a přesměruje klienta přímo na dotyčný soubor. Důsledkem je, že klient získá soubor v původním tvaru, aniž by byl poničen překladem. Z toho vyplývá další příjemná věc - na obrázky mohou vést i relativní odkazy. To samé samozřejmě platí i pro (nyní módní) animované GIFy.
Správce při instalaci určí implicitní zdrojový typ kódování. Mělo by se jednat o kód, ve kterém je napsána většina stránek (nejlépe všechny). Pokud autor používá kódování jiné, má dvě možnosti:
Tímto způsobem lze dokonce kombinovat několik různých kódů v jednom dokumentu, což by se ovšem nemělo běžně používat - znesnadňuje to pozdější úpravy.
Pokud to správce při instalaci povolí, může CSáček vytvořit na požádání na stránce lištu s výběrem typu kódování - vypíše názvy kódů, které jsou aktivními odkazy na stránky převedené do příslušných kódování. Je možno do jisté míry ovlivnit tvar této lišty - nastavit, zda se má vypsat anglická/česká verze (volba E, resp. CZ), zda se má lišta na konci dokumentu vypsat automaticky nebo ne (ALWAYS/NOBAR), nastavit HTML oddělovač mezi názvy kódů (SEP=html_značka), zapnout/vypnout vypisování hlavičky (TITLE/NOTITLE), zapnout/vypnout vypisování závěru (BACK/NOBACK), přepínat mezi dlouhými názvy kódů v liště a jejich trojpísmennými zkratkami (LONG/SHORT) či vrátit se zase k defaultnímu tvaru nastavenému při instalaci (DEFAULT). Nastavený tvar lišty platí pro všechny další lišty na stránce. Vlastní lišta se vypíše speciálním HTML komentářem ve tvaru <!-BAR [volby]->. Pokud chce autor dokumentu pouze nadefinovat tvar lišty pro pozdější použití, může použít příkazu <!-BARDEF volby->, který lištu nevypisuje.
Pokud jste už někdy byli nuceni vytvořit dokumenty ve více různých variantách nebo jazycích, jistě jste zjistili, jak nesnadné je takové dokumenty aktualizovat. Jsme jenom lidé, a to lidé omylní a zapomínající. Je-li takových dokumentů v několika variantách více, je pak obvykle velice těžké vysledovat, odkud a kam vlastně mají vést hypertextové odkazy a kde všude se mají provést opravy, pokud se změní informace na jednotlivé stránce. CSáček umožňuje udržovat všechny verze dokumentu v jediném souboru, čímž nabízí nezanedbatelné zjednodušení administrace, a umožňuje mezi verzemi vcelku jednoduše přepínat - pouhou změnou přípony u konverzního skriptu. Jednolivé části, z nichž se vytvářejí různé verze dokumentu, se označují speciálním HTML komentářem ve tvaru <!-PART název_verze->, kde název_verze je označení verze používané při odkazech. Jestliže by jinak odkaz vypadal http://kdesi/cgi-bin/toKOI8-CS/muj.html, pro zobrazení jen oné požadované verze musí být odkaz http://kdesi/cgi-bin/toKOI8-CS.název_verze/muj.html. Je vyhrazen název ALL, sloužící k označení částí, které se mají objevit v každé verzi dokumentu. V každé verzi dokumentu se také objeví vše do prvního výskytu příkazu <!-PART xx->. Části beze jména (<!-PART ->) se zobrazí, pokud odkaz na dokument neobsahoval u názvu skriptu starajícího se o překódování příponu (tzn. jako v předchozím příkladě varianta http://kdesi/cgi-bin/toKOI8-CS/muj.html). Názvů verzí je možno uvést v jednom příkazu PART více. Pro zachování stejné verze při absolutních adkazech mezi různými dokumenty slouží speciální textový řetězec .cs, který CSáček v textu dokumentu nahradí správným názvem požadované verze, včetně případné počáteční tečky.
Pokud si přejete měnit obsah dokumentu podle domény počítače, odkud přistupuje uživatel na danou WWW stránku, můžete využít příkazu DOMAIN. Používá se ve tvaru <!-DOMAIN jméno_domény->. Je možno specifikovat více domén, zadaných jako jména (např. ics.muni.cz) nebo jako části IP adres (např. 147.251). Pokud jako jméno domény uvedete adresu konkrétního počítače, bude tato část zobrazena jen pro uživatele přistupující z tohoto stroje. Jméno ALL je rezervováno, značí, že následující text se zobrazí každému.
Jistě může přijít chvíle, kdy byste rádi uzavřeli část svého Webu pro veřejnost, třeba proto, že chcete pro omezenou skupinu lidí (zaměstnanců či studentů) zpřístupnit osobní či důvěrné informace nebo informace cenné z jakéhokoli jiného důvodu a nechcete je nechat napospas celé Internetové komunitě. CSáček (a v podstatě kterýkoli CGI skript, který předává stránky z WWW serveru podle přání vzdáleného uživatele) umožňoval obcházet omezení přístupu k Webovým stránkám, definované pomocí souborů .htaccess v příslušných "tajných" adresářích. Od verze 1.3 už dává CSáček pozor, zda se na cestě k požadovanému dokumentu nevyskytuje soubor .htaccess (či jeho lokální ekvivalent), a pokud ano, nevyzvedává dokument přímo ze systému souborů, ale převezme roli WWW klienta a požádá o něj Webový server, na kterém se stránka vyskytuje. Vše tak probíhá k plné spokojenosti všech zúčastněných.
K tomu, aby tato krásná myšlenka nezůstala jen prázdným snem, však nestačí jen snaha CSáčku. Aby to celé fungovalo, musí být od WWW serveru předávána hlavička Authorization, obsahující identifikaci a heslo, pod nímž se vzdálený uživatel do chráněného podstromu hlásí. CSáček totiž (ve své roli WWW klienta) musí tuto hlavičku předat WWW serveru, aby od něj požadovaný dokument vůbec dostal, a pokud ji nebude mít k dispozici, nebude jej server považovat za platného uživatele a odmítne mu dokument vydat.
WWW server se tedy musí buď nakonfigurovat tak, aby tuto hlavičku CGI skriptům předával, nebo (pokud to nejde a je-li přístupný jeho zdrojový kód) je nutno jej příslušně změnit a překompilovat. Pokud žádná z těchto dvou možností není přípustná, budete se bohužel muset bez CSáčku na chráněném podstromu obejít.
Z bezpečnostních důvodů nejsou změny konfigurace nebo zdrojového kódu vhodné tam, kde neexistuje kontrola nad CGI skripty, které se na WWW serveru objeví. V takovém prostředí však asi nemá vůbec cenu pokoušet se o nějaký bezpečný server, protože kterýkoli z uživatelů si může pomocí vhodně napsaného CGI skriptu zpřístupnit kterákoli data, která jsou WWW serveru čitelná.
SSI4 je možnost, jak do dokumentů vkládat jiné dokumenty, výstupy z programů a další. CSáček je může podporovat tak, že je-li požádán o dokument, který chce SSI používat, nevyzvedává dokument ze systému souborů sám, ale požádá o něj WWW server. Pokud WWW server s dokumentem nic neudělá (ať už kvůli nastavení nebo že to neumí), CSáček některé příkazy sám provede (momentálně se jedná o #include file a #exec cmd). Na WWW serverech dbajících na jistou úroveň bezpečnosti je asi vhodné direktivu #exec zakázat, neboť takto spuštěné programy "běží" pod stejnou identifikací jako WWW server a získají tak přístup k informacím, které by jinak měly zůstat utajeny. Pokud však takové informace na serveru nemáte, není důvod exec zakazovat - dají se takto vcelku pohodlně počítat přístupy na stránku nebo vkládat aktuální datum či čas, což lokální uživatelé ocení.
Pokud by měl CSáček kódovat výstup z CGI skriptu, který sám čte z nějakého souboru (funguje jako filtr), je lepší k tomuto účelu použít Csáček filtr. CSáček filtrem může být kterýkoli program, který čte ze standardního vstupu a zapisuje na standardní výstup. Komunikace mezi filtrem a CSáčkem probíhá (překvapivě :-) pomocí "trubek". Filtr je možno nainstalovat dynamicky. Užitečnější se zdá být filtr před CSáčkem, protože se tak dá jednoduše zpracovávat výstup z různých vyhledávacích či jiných programů, aniž by tyto musely být přímo CGI skripty; CSáček se sám postará o překódování a HTTP hlavičky. Vyplatí se použít tuto konstrukci i v případě, že by případné vytvoření CGI skriptu nebylo příliš obtížné, protože toto řešení šetří čas WWW serveru, systémový čas i (a to je asi rozhodující) čas koncových uživatelů. Syntaxe vkládání Csáček filtrů není v současné době ještě ustálena a není vyloučeno, že se bude ještě měnit. Zpětná kompatibilita s nynějším zápisem však zůstane zachována.
Zjistit, jaké je nastavení CSáčku instalovaného na Webovém serveru, lze zavoláním CSáčku 1.3+ s parametrem ?csacek_report; tj. odkaz bude vypadat nějak takto: http://kdesi/cgi-bin/toASCII?csacek_report.
Pokud je CSáčku 1.3+ předán parametr ?csacek_help, vytvoří a pošle krátkou stránku popisující příkazy, které zvládá, spolu se stručným popisem, jak se co používá a k čemu to je, a rovněž odkaz na svou domácí stránku.
Následuje krátký přehled příkazů, které CSáček rozeznává v textu dokumentu a které mají vliv na konečný výsledek. Řádek s příkazem se na výstup neopisuje, při použití dvou navzájem opačných voleb platí poslední uvedená a rozeznává se pouze jeden příkaz na řádku.
CSáček byl úspěšně otestován na stránkách ÚVT MU (http://www.ics.muni.cz) a prorazil si cestu i na Weby Fakulty informatiky. Bude také používán na budovaných celouniverzitních Webech k zajištění správného kódování pro každého uživatele. Zprávy o používání CSáčku mimo MU potvrzují, že se rozšiřuje a získává si oblibu také jinde.
CSáček byl portován z prostředí operačního systému UNIX, ve kterém a pro které byl vyvíjen, do prostředí MS Windows NT5 a pracuje se na portaci do OpenVMS6.
A budoucnost? Cíl číslo jedna je pročištění kódu a zakomponování portu pro NT a OpenVMS přímo do originál distribuce. Mezi další (méně naléhavé) věci patří podpora Unicode, Skynetovské češtinky a také emulace některých oblíbených kodérů, jako je třeba compose od Oty Bojara. Také by se měl změnit jazyk CSáčku, z dnešních několika izolovaných příkazů na něco, co by se syntaxí podobalo jazyku C. A pokud se vyskytne potřeba něčeho dalšího, měl by umět i to ;-). V této souvislosti bude autor článku vděčný za jakékoliv připomínky a náměty.
CSáček je volně použitelný a šiřitelný program, a to jak v binární, tak ve zdrojové formě. Je dán k dispozici v mezích upravené BSD licence7.
Podrobnější informace o programu jsou k nalezení na domovské stránce CSáčku na adrese http://www.ics.muni.cz/~dolecek/c-saczech/. Distribuci CSáčku je pak možno získat na adrese ftp://ftp.muni.cz/pub/localization/csacek/. Dotazy na CSáček směřujte do diskuzní skupiny csacek@dioricsmunicz, autora lze kontaktovat na adrese dolecek@icsmunicz.
1 | SaCzech je balík skriptů v Perlu pro změnu kódování češtiny
od Pavla Satrapy, bližší informace na adrese
http://otus.kin.vslib.cz/cgi-bin/whichcode/~satrapa/sw/saczech/.
... zpět do textu |
2 | V době psaní tohoto článku dostupný přes ftp na serveru
ČVUT service.felk.cvut.cz, v adresáři
/pub/export/software.
... zpět do textu |
3 | Uniform Resource Locator - označení místa stránky
... zpět do textu |
4 | Server Side Includes - vsuvky vkládané WWW serverem
... zpět do textu |
5 | Portaci do Windows NT provedl pan Zdeněk Pokorný,
zpokorny@agccz, v době psaní tohoto článku možno
vyzvednout na pokusném NT ftp serveru
ftp://zps.agc.cz/ShareWare/CSaczech/; základem byl
CSáček 1.23.
... zpět do textu |
6 | Případné dotazy na tento port směrujte na pana Martina
Bílého, e-mail bily@csfelkcvutcz, jako základ posloužil
opět CSáček 1.23.
... zpět do textu |
7 | Viz soubor COPYRIGHT, který je součástí distribuce.
... zpět do textu |