Nahlédněte i do Diskuse pod čarou!
CGI-skript | Verze | Jazyk a platforma | Umístění volby | Adresování odkazů | Označení kódování | Práce s obrázky | Vstup |
---|---|---|---|---|---|---|---|
C-SaCzech | 1.3.3, freeware | C; unix, NT | jméno skriptu | relativní | WWWdia | relativní průchozí | file, http, guess |
Czech plug-in | 1.0d7 (23.9.1997) | C; Mac OS | jméno skriptu, dotaz, Accept-language |
relativní | WWWdia, CzechWeb | relativní | file |
CzechHTTP | 2.0d8 (22.1.99), freeware | nahrazen Text Encoding Plug-Inem | |||||
gw_convert.pl | (14.8.96), freeware? | perl; unix | cesta | relativní | gw_convert | relativní opraví, nezvládá JPEGy | file |
kod | 1.4 (28.3.97), public domain | perl; unix | cesta | relativní | kod, WWWdia | relativní opraví | file |
SaCzech | 2.0, freeware | perl; unix, NT | jméno skriptu | relativní | WWWdia | relativní průchozí | file, http, guess |
Text Encoding Plug-In | 1.0b1 (19.9.1999), freeware | C; Mac OS | dotaz | relativní s volbou | CzechHTTP (CzechWeb) | obyčejné relativní | file |
compose | 2.0 (bez vývoje), public domain | C; unix | cesta | relativní | WWWdia, rozumí všem ostatním | relativní průchozí | file |
WWWdia | K2.2 (bez vývoje), freeware | C; unix | dotaz | relativní s volbou | WWWdia | absolutní | file |
CGI-skript | Verze | Změna výchozího kódování | Lišta volby kódování | Úseky dokumentu | Vkládání souborů | |
---|---|---|---|---|---|---|
Automatická | Příkazem | |||||
C-SaCzech | 1.3.2 (16.2.97), public domain | ano | nastavitelná | ano | podle kódování, jazyka nebo domény čtenáře | - |
Czech plug-in | 1.0d7 (23.9.1997) | ano | - | ano | - | ano |
CzechHTTP | 2.0d6 (25.9.98), freeware | pouze podle dotazu na soubor | - | - | - | ano |
gw_convert.pl | (14.8.96), freeware? | - | - | - | - | - |
kod | 1.4 (28.3.97), public domain | - | při výstupu ASCII | ano | - | - |
SaCzech | 2.0, freeware | ano | - | ano | - | - |
compose | 2.0 (bez vývoje), public domain | ano | - | - | podle kódování, jazyka a přepínačů | ano |
WWWdia | K2.2 (bez vývoje), freeware | - | - | - | - | - |
Samozřejmě, že již není nepřekonatelným problémem přenést program na jinou platformu, je to však dost zbytečná práce. Toto kritérium je tedy zřejmě nejdůležitějším faktorem a podle použitého programovacího jazyka lze navíc usuzovat na rychlost a efektivitu programu - C se zkompiluje a je tedy nejrychlejší, perl je interpret náročný na paměť a sh se vyznačuje spouštěním mnoha pomocných procesů.
CGI-skript používáte jako "rouru" na dodávaný soubor, tj. začleníte ho do URL konvertovaného dokumentu.
kde cgi-bin/skript je cesta a jméno použitého konverzního programu a cesta je cesta k dokumentu.
- URL stránky bez převodu:
http://server/cesta/doc.html
- URL s převodem:
http://server/cgi-bin/skript/cesta/doc.html
Skriptu je však třeba předat i informaci o požadovaném kódování souboru. Tuto informaci je možné (pořadí podle šikovnosti)
- Předat v HTTP hlavičce v poli
Accept-charset
Na toto pole zatím reagují většinou jen češtinové moduly a jen velmi málo prohlížečů dovolí tuto volbu nastavit, byť je tento způsob v principu cestou ideální. Více se dočtete v popisu MIME.- Předat v HTTP hlavičce v poli
Accept-language
Tuto volbu dovolí nastavit mnohem více prohlížečů, proto na ni např. reaguje Czech plug-in L. Popova. Jedná se však o částečné zneužívání významu pole - původně slouží k označení požadovaného jazyka, a nikoli znakové sady. Více se opět dočtete v popisu MIME.- Předřadit před cestu k dokumentu v URL v podobě falešného adresáře
http://server/cgi-bin/skript/volba/cesta/doc.html
- Začlenit do jména skriptu v URL
http://server/cgi-bin/skriptvolba/cesta/doc.html
- Připojit na konec URL v syntaxi dotazu na server
http://server/cgi-bin/skript/cesta/doc.html?volba
Nejméně šikovnou volbou je předávání informace o volbě kódování připojené na konci URL, neboť je v takovém případě nutné pro každý odkaz v překládané stránce tuto volbu explicitně opakovat (případně to skript dělá automaticky - na to ale musí všechny odkazy vyhledávat). Viz též adresování odkazů relativní s volbou níže.
Jak jsem již zmínil, nejvhodnější je naopak požadavek v hlavičce
Accept-charset
(nebo v horší variantěAccept-language
), protože URL na dokument není kromě cesty na skript pitvořena ještě navíc označením kódování. Některé servery navíc dovolují CGI-skript nezařazovat do URL vůbec, ale spouští jej automaticky při požadavku o určitý typ dokumentu - v takovém případě se skript chová stejně nenápadně jako modul do serveru.
Předpokládá se, že dokumenty, na než se již překódovaný dokument odkazuje, budou poskytnuty v témže kódování. Je tedy nezbytné, abyHREF
na další dokument obsahoval (nebo lépe: vyjadřoval) URL s platnou volbou kódování.
- relativní
- Je-li volba součástí URL předřazené před jméno dokumentu, funguje každý relativní odkaz správně. (URL se totiž vytvoří ze stávající URL a tato již volbu obsahuje.)
- relativní s volbou
- Je-li volba v URL až za jménem dokumentu, je nutné tuto volbu zopakovat na konci každé relativní URL, např.:
s výjimkou URL odkazujících se jinou část současného dokumentu, např.:../ovoce/jablka.html?volba
z dokumentu/potraviny/zelenina/mrkev.html
../ovoce/jablka.html#stopka?volba
z dokumentu/potraviny/zelenina/mrkev.html
#stopka
z dokumentu/potraviny/ovoce/jablka.html
Vysvětlení: URL se vytvoří z cesty k stávajícímu dokumentu, kde žádná volba přítomna není. Zopakováním volby v relativní adrese vnutíte tuto volbu do výsledné URL. Výjimka odkazů na jinou část téhož dokumentu pramení z interpretace#části
samotným browserem a server do hry nevstupuje vůbec; odkaz na#část?volba
by browser jedině zmátl, neboť dokument žádnou část jménem "část?volba
" neobsahuje.- absolutní
- Při absolutním adresování je samozřejmě nutné uvést volbu vždy. Naopak je tu možnost přejít na jiný server, kde může být čeština podporována i jiným skriptem - viz kritérium Označení kódování.
Zápis volby se liší program od programu. Proč se tím ale zabývat?
Pakliže čtenář již jednou zvolí kódování, řekněme že na serveru s WWWdia, neměl by být při použití odkazu na nějaký jiný server podporující češtinu jiným způsobem (např. kodem) opět požádán o volbu kódování, neboť výchozí WWWdia by za optimálních podmínek měl tento odkaz automaticky upravit, rozšířit o platnou volbu kódování, stejně jako to dělá u lokálních odkazů nebo u odkazů na servery s WWWdia.
Nejdůležitější součástí volby je samozřejmě označení požadovaného kódování, v odkazech použitých v překládaných dokumentech se na takové místo píše "neutrální" volba, tj. řetězec, který je při překladu nahrazen označením cílového kódování.
Následující tabulka ukazuje, že jakýs takýs standard se v označování kódování na WWW vyvinul. Tento standard je však bohužel odlišný od standardu MIME, používaného v celém Internetu. (Na WWW se MIME drží např. češtinové moduly do serverů.)
[Tabulka formátovaná v ASCII] (Údaje podle kodu, který je nadobyčej kompatibilní.) Plné jméno znakové sady WWWdia, C-SaCzech, compose, SaCzech kod, encode code gw_convert.pl CzechHTTP neutrální, při převodu nahrazeno __CHARSET__
- MacCE ASCII ASCII asc ascii a ASCII ISO Latin (8859) 2 ISO-8859-2 iso isolat2 i ISO2 ISO Latin (8859) 1
(pouze část českých znaků)ISO-8859-1 iso1 isolat1 - ISO1 Macintosh Central Europe MAC mac cemac m MacCE Windows EE, CP1250 CP1250 win w1250 w CP1250 bří. Kameničtí KEYBCS2 kam cskam k KamCS PC Latin 2, CP852 CP852 cp pclat2 l Latin2 Jak je vidět, jedním standardem je WWWdia, druhým kod (code neznám). Vzájemná kompatibilita volby v odkazu na jiný skript je u skupin skriptů se stejným druhem označení zaručena (kromě odkazů z "WWWdiovských" stránek na compose, který má ve své volbě ještě další přepínače, jejichž nastavení by měl uživatel moci ovlivnit). Kod je kompatibilní jak s "WWWdiovskými skripty", tak i s codem (víte, kde se dá nalézt? napište!).
Obrázky a další objekty, na něž se přeložená stránka odvolává, je za normálních okolností možné adresovat:
- absolutně
http://www.server.cz/cgi-bin/barevne/ikonka.gif
- URL je "plnohodnotná", pevně zakotvená na určité místo, a proto jí průchod kódovacím skriptem nijak nehrozí.
- relativně
../back.gif
- Relativní adresování je všeobecně považováno za vhodnější, podstatným pro naši otázku však zůstává fakt, že se konečná URL vytváří z URL vašeho dokumentu (nebo URL specifikované pro celý dokument tagem
BASE
), tedy URL vedoucí přes kódovací skript (viz úvod kapitolky Volba kódování), např.:Je pochopitelné, že překódovávat obrázek je nesmysl. Skripty, které umožňují obrázky a jiné objekty adresovat relativně, jsou:http://server/cgi-bin/skript/cesta/obrázek.gif
- průchozí
- Skript odpoví na požadavek o obrázek ap. (tedy soubor bez přípony indikující nutnost převodu) pouze hlavičkou HTTP, v níž klientovi sdělí skutečnou polohu souboru. Klient pak o tento soubor znovu požádá.
- opraví
- Již při průchodu výchcozího dokumentu opravuje skript relativní odkazy obrázků na absolutní ukazující na objekt přímo.
CGI-skript může získávat data k překódování a poslání klientovi různým způsobem:
- file
- indikuje obvyklý způsob, tj. ze souboru, který byl skriptu určen z URL.
- http
- skript získá data pomocí protokolu HTTP, tedy rekurzivní zavoláním serveru. Výhodou tohoto způsobu je možnost překládat výstup z CGI-skriptů, skrývá se tu však úskalí v chování serveru, který může chtít nejprve dokončit konverzní skript a teprve pak se zabývat novým požadavkem.
- guess
- je kombinací obou metod, kdy skript sám rozhodne, zda má data získat rychlejším přímým čtením ze souboru nebo rekurzivně volat server.
Část souboru vyznačená určitým příkazem se převádí z jiného kódování, než je pro skript implicitně nastaveno. Této schopnosti s úspěchem mohou využít autoři stránek, kteří vytvářejí soubory v jiném kódování, než je standardem na jejich serveru. Praktické výhody v jednom souboru obsahujícím části textu v různých kódováních nevidím, nicméně skripty toto principielně umožňují.CzechWeb (předchůdce CzechHTTP) býval poněkud atypický - umožňoval totiž čtenáři zadat v URL na dokument i zdrojové kódování dokumentu, tedy kódování, v němž je soubor uložen na serveru. (Pokud je tedy dokument uložen na disku v jiném kódování než v implicitním CE, je chyba na straně toho, kdo zadal URL na tento dokument bez explicitního určení jiné zdrojové kódové stránky.) Nevím, zda stejné ovlivňování dovoluje i současný CzechHTTP.
[asc] [iso] [win] [mac] [vyber]Lišta s tlačítky pro výběr kódování může být skriptem přidána na konec dokumentu automaticky (např. u kodu pouze pokud je dokument převeden do ASCII, C-SaCzech umožňuje automatické přidání lišty nastavit a lištu je možné dokonce pozměnit - zvolit dlouhou nebo krátkou variantu ap.).
Pokud poloha lišty nevyhoduje, je možné umístit ji vnitřním příkazem kamkoli na stránku. Při průchodu skriptem se tento příkaz nahradí samotnou lištou.
Skript dává autorům stránek možnost uložit do téhož dokumentu např. český i anglický text a podle požadovaného kódování čtenáři předložit pouze odpovídající části. "Kódováním" může v tomto případě být i např. angličtina. Tuto schopnost má kod, C-SaCzech a compose.C-SaCzech umí rovněž poskytnout nebo vypustit vyznačenou část dokumentu podle označení domény počítače, který o stránku požádal.
Compose navíc umožňuje nastavovat dodatečné volby zobrazení pomocí několika přepínačů a následně podle těchto voleb poskytnout čtenáři jen určité části dokumentu, pro něž je volba zapnuta resp. vypnuta. Např. lze takto do jednoho dokumentu uložit úsek pro Netscape i stejnou tabulku "vykreslenou" v
<PRE>
: +---+---+ | A | B | +---+---+
Compose má příkaz, pomocí něhož lze do výstupu překladu vložit obsah a rekurzivně interpretovat další composové příkazy nějakého souboru (např. standardizované patičky, případně simulované lišty kódování).C-SaCzech víceméně vkládání souborů dovoluje také - přenechá totiž zpracování tzv. Server-Side Includů (příkazů v dokumentu interpretovaných http serverem při poskytování stránky) na serveru a jeden z používaných SSI k vkládání souborů slouží.