Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Polyglot aneb webovým kodérem pod obojí

Petr Stehlík aura:46
24. 10. 2011 8:31 Nový

BOM je smetí

celé vlákno

Nesouhlasím s autorem v tom, že "v ideálním případě byste měli přidat BOM". Pro mě je to binární smetí, které řada editorů zobrazí, které dokáže rozhodit PHP interpretr (neptejte se mě jak, uložil jsem si do paměti jen, že to zlobí, ale nenamáhal jsem se zapamatovat si jak to zlobí) a hlavně je to při UTF-8 zbytečné a nedoporučené. Dále viz http://en.wikipedia.org/wiki/Byte_order_mark.

Jirka Kosek
24. 10. 2011 10:33 Nový

Re: BOM je smetí

celé vlákno

Bylo by dobré odlišit obecné použití BOM od použití v polyglot dokumentech. Použití BOM (a konec konců celý polyglot dokument) není výmysl autora článku, ale nepěkná situace, která kumuluje různé chyby a okolnosti posledních 15 let, a snaží se z nich vybruslit. Pro podrobnosti můžete zapátrat v originální specifikaci HTML5 a Polyglot.

Kromě svých problémů má BOM i své výhody:

- umožňuje správně určit kódování editorům, které nic nevědí o HTML5 a nerozumí <meta charset="..."/> a nepoužívají UTF-8 jako default - například Notepad

- umožňuje vytvořit HTML5 dokument bez <meta charset="..."/> - z historických důvodů a kvůli zpětné kompatibilitě s HTML4/HTTP je výchozí kódování v HTML5 US-ASCII a nikoliv UTF-8

O problémech PHP a BOM viz strana 18 v http://www.kosek.cz/knihy/phpxml/php5xml-unicode.pdf

Marax
Marax (neregistrovaný) ---.103.broadband6.iol.cz
24. 10. 2011 10:54 Nový

Re: BOM je smetí

celé vlákno

Když jsem začínal s PHP, BOM pro mě byl největší problém. Teda problém bylo to, zjistit, že ty znaky na konci souborů při include dělá BOM.

Pavel Šimerda
24. 10. 2011 14:31 Nový

Re: BOM je smetí

celé vlákno

BOM je bordel, bez něj má UTF-8 všechny dobré vlastnosti ASCII kromě pevného počtu bajtů na znak. Autor myšlenky přenést tento bordel z UTF-16 i na UTF-8 by zasloužil nějaký pikantní trest.

Pokud se používá BOM v UTF-8, kde mimochodem nemá co dělat, tak už nefunguje správně ani konkatenace řetězců/souborů, natož nějaký INCLUDE.

Tomáš Herceg
Tomáš Herceg (neregistrovaný) ---.175.broadband5.iol.cz
24. 10. 2011 18:15 Nový

Re: BOM je smetí

celé vlákno

BOM by měl být všude a povinně, jinak musí každý to kódování většit. Na meta charset ani HTTP hlavičku se obecně spolehnout nedá, cca 10% webů kódování uvedené nemá, nebo ho má špatně, s překlepem atd.

Franta Kučera aura:90
24. 10. 2011 20:00 Nový

Re: BOM je smetí

celé vlákno

To je ale přece chyba těch webů! A jestliže je někdo líný/neschopný posílat správnou HTTP hlavičku (nebo to zbastlit aspoň přes tu HTML meta značku), tak těžko od něj čekat, že bude do souborů vkládat BOM.

Kromě toho BOM patří k těm horším řešením jak dát najevo použité kódování – protože musím soubor nejprve (částečně) načíst a až pak se dozvím, v jakém je kódování – ne jako když ho znám předem (z hlaviček, rozšířených atributů atd.) a můžu si jednoduše otevřít proud dat včetně správného dekódování.

Navíc Pavlix má pravdu v tom, že BOM komplikuje spojování souborů pomocí příkazu cat nebo obecně spojování „slepením“ dvou posloupností bajtů – v podstatě takový soubor nelze považovat za prostý text, ale za určitý speciální formát.

Pavel Šimerda
24. 10. 2011 21:37 Nový

Re: BOM je smetí

celé vlákno

„v podstatě takový soubor nelze považovat za prostý text, ale za určitý speciální formát.“

Franto, ty mi snad čteš myšlenky.

Pavel Šimerda
24. 10. 2011 21:36 Nový

Re: BOM je smetí

celé vlákno

„BOM by měl být všude a povinně“

Tak snad nedostaneš infarkt, když ti řeknu, že unixové/linuxové editory samy od sebe BOM nedávají nikdy, a že tím pádem má většina linuxáků na disku hromadu souborů (včetně těch s html), které BOM neobsahují.

Jinak implikací povinného BOM na začátku souboru je při includech BOM i uprostřed výsledných souborů, a existují prohlížeče, které ti rozbijou layout, pokud tam BOM máš, a je to naprosto v pořádku, protože tam nemá co dělat.

PHP s BOM se rozbíjí taky (nevím, jestli už je na to nějaká náhrada), stejně libovolné skripty na linuxu (první znaky nejsou #!, ale BOM#!, taky nevím, jestli se to už nějak obchází).

Přitom nastavit Content-Type včetně kódování je tak jednoduché.

Franta
Franta (neregistrovaný) 2001:15c0:66ef:----:----:----:----:----
24. 10. 2011 12:10 Nový

Meta – charset

celé vlákno

Proč je nutné pro HTML parser uvádět kódování uvnitř dokumentu, když se posílá i v HTTP hlavičkách?

Jirka Kosek
24. 10. 2011 12:26 Nový

Re: Meta – charset

celé vlákno

Samozřejmě, když ho pošlete v HTTP hlavičkách, tak v dokumentu být uvedené nemusí. Jenže průměrný čtenář zdrojáku...

... pravděpodobně bude stránky otevírat i z lokální disku, kde žádné hlavičky nejsou

... má některé stránky na hostingu, kde nemůže ovlivnit jaké parametry se přidávají do hlavičky Content-type

Ale samozřejmě, v článku jsou jistá praktická zjednodušení.

Franta
Franta (neregistrovaný) 2001:15c0:66ef:----:----:----:----:----
24. 10. 2011 13:25 Nový

Re: Meta – charset

celé vlákno

ok, tak to chápu.

BTW: je škoda, že se víc nepoužívají rozšířené atributy souborů – např. wget a curl do nich umí ukládat MIME typ a kódování (případně další věci) z HTTP hlaviček. Ono je obecně dobré vědět, jaký formát načítám a v jakém je kódování, ještě než si ten soubor (proud dat) otevřu a prokoušu se k nějakým meta značkám uvnitř.

Pavel Šimerda
24. 10. 2011 14:36 Nový

Re: Meta – charset

celé vlákno

Ono by vůbec stálo za to, kdyby se pár lidí chytilo za hlavu a přestali by používat různé iso-8859, windows/msdos/ibm a jiná kódování a shodli by se na to, že se budou používat pouze kódování, která kódují celý Unicode.

A v druhém kroku by bylo dobré, kdyby v naší osmibitové (bajt = 8 bitů) éře používali pouze osmibitovou variantu, tedy UTF-8, protože UTF-16 proti němu má jen samé nevýhody a UTF-32 se asi neuchytí kvůli plýtvání místem.

Franta Kučera aura:90
24. 10. 2011 15:34 Nový

Re: Meta – charset

celé vlákno

To není zrovna reálné. A taky bychom se tím vlastně vrátili do doby, kdy se tiše předpokládalo „jediné správné kódování“ – tzn. 90. léta a věčné problémy s „češtinou“ – kdy někdo předpokládal cp1250 a o jiných kódováních neměl ani tušení a ten soubor byl jako na potvoru v ISO-8859-2.

Že by se všichni dohodli na jednom kódování se nedá čekat – např. v některých malých zařízeních nebo nízkoúrovňových programech fakt nemusím chtít řešit vícebajtová kódování. Jinde zase dají přednost UTF-16 před UTF-8 atd. Prostě říct: „budeme všichni používat UTF-8“ by IMHO vedlo akorát k bordelu a chybám, protože stejně někdo bude používat jiné kódování – takhle je možné říct, jaké kódování se používá a podle toho se zařídit.

Existují dobré způsoby, jak tuhle informaci sdělit: HTTP hlavičky, e-mailové hlavičky, rozšířené atributy souborů… horší ale použitelné způsoby: XML deklarace a v horším případě meta značky uvnitř HTML (tam už musíme načíst soubor a pak se nějak „za chodu“ přepnout do správného kódování nebo soubor načíst znovu). Ale úplně nejhorší je předpokládat nějaké implicitní kódování aniž by o tom byla nějaká jasná dohoda (ta u některých formátů je a pak není potřeba kódování explicitně uvádět, ale obecně taková dohoda napříč formáty nikdy nebude).

Pavel Šimerda
24. 10. 2011 21:41 Nový

Re: Meta – charset

celé vlákno

No já osobně nevidím problém v UTF-8 jako jediném správném kódování, když je alespoň detekovatelné (téměř nepotkáš dokument, který by byl jako utf-8 špatně interpretován).

Já nemám nic proti tomu, když někde na světě ještě existují stará kódování. UTF-16 je relativně náchylné na chyby a chybné předpoklady (jako třeba domnělá pevná bitová šířka znaků). Ve výsledku mi ale jako užitečná kódování vycházejí pouze UTF-8 a UTF-32 (pokud jo nutně potřebuju pevnou šířku znaku).

Marek Knápek aura:34
24. 10. 2011 12:29 Nový

Pořádný standard

celé vlákno

Jó to kdybychom tu měli pořádný standard, který by všichni hráči respektovali..To bychom pak nemuseli řešit takovéhle krávoviny. Někde jsem četl, že standardizační autorita vydá standard teprve poté až jsou k dispozici dvě nezávislé implementace, WTF??

Pavel Šimerda
24. 10. 2011 14:38 Nový

Re: Pořádný standard

celé vlákno

Kéž by. Vydávat standardy, které nikdy nikdo neimplementuje je nesmysl. Mimochodem W3C doporučení sama W3C za standardy neoznačuje.

Bronislav Klučka aura:36
24. 10. 2011 14:52 Nový

Re: Pořádný standard

celé vlákno

WTF?
1/ Reálně (snad někdo s bližším vztahem k W3C potvrdí) se za standard již dá považovat Candidate Recommendation

2/ A ano, do stavu Recommendation se dostane po 2 plných a nezávislých implementacích. Důvodem je to, že návrhy jsou obvykle extrémně komplexní a při nejlepší vůli při teoretickém návrhu může dojít k několika věcem:
a/ v návrhu se může objevit chyba, prostě může, která se projeví až při implementaci a provozu
b/ něco může v návrhu chybět, určitý postup, který není standardizovaný, v návrhu se mohou objevit formulace, které se při implementaci ukáží jako vágní a bude třeba je doplnit
c/ může se ukázat, že návrh obsahuje zbytečnosti, zbytečné předepsané postupy, u kterých se ukáže při implementaci jednodušší cesta

a tím, že W3C vyžaduje 2 nezávislé implementace by tyto problémy měli být eliminované -> návrh je implementovatelný a při implementaci se neobjevili závažné problémy a návrh je implementovatelný různými postupy/nástro­ji/knihovnami

juraj
juraj (neregistrovaný) ---.pks.muni.cz
24. 10. 2011 15:14 Nový

Re: Pořádný standard

celé vlákno

Veď existuje. HTML.

maryo
maryo (neregistrovaný) ---.net.upcbroadband.cz
24. 10. 2011 14:22 Nový

Re: Polyglot aneb webovým kodérem pod obojí

celé vlákno

No vida. Uplne presne takhle to pisu od zacatku... Po predchozim clanku jsem myslel, ze je to nejvetsi hrich, ted mam konecne opet ciste svedomi :).

noname
noname (neregistrovaný) ---.242.broadband3.iol.cz
24. 10. 2011 21:05 Nový

takže to shrňme

celé vlákno

Takže to shrňme - polyglot je prostě XHTML 1.1 kde je jen jiná deklarace <html a můžu tam používat HTML5 tagy - tak v tom případě to takhle dělám už asi 2 roky. XHTML strict je pro mě hlavně kontrola, že jsem na nic nikde nezapomněl, taková best practice

Pavel Šimerda
24. 10. 2011 21:43 Nový

Re: takže to shrňme

celé vlákno

XHTML 1.1 nemá rozlišení na strict variantu a jiné, ne?

Jirka Kosek
24. 10. 2011 23:15 Nový

Re: takže to shrňme

celé vlákno

Takže to shrňme - polyglot je prostě XHTML 1.1

Není, XHTML 1.1 může používat veškeré prvky syntaxe XML, polyglot dokument pouze ty, které produkují stejný efekt při čtení parserem HTML.

Franta Kučera aura:90
24. 10. 2011 23:33 Nový

Re: takže to shrňme

celé vlákno

BTW: Nebylo by lepší, kdyby prohlížeče měly pouze XML parser (klidně každý svůj vlastní) a v případě rozbitých dokumentů by zavolali HTML Tidy (knihovna společná všem prohlížečům)?

Jirka Kosek
25. 10. 2011 9:20 Nový

Re: takže to shrňme

celé vlákno

To musela být včera hodně divoká party :-D

Dělat to takhle je nesmysl z mnoha důvodů, o některých by šlo i diskutovat. Ale o jednom diskutovat nejde -- současné prohlížeče stránku vykreslují inkrementálně ať už se čte pomocí XML nebo HTML parseru -- DOM se průběžně konstruuje a následně vykresluje. V případě použití externí knihovny, by se muselo čekat, až ta celý kód zpracuje a pak teprve by s ním šlo něco dělat -- znovu naparsovat jako XML a začít renderovat.

Franta Kučera aura:90
25. 10. 2011 9:33 Nový

Re: takže to shrňme

celé vlákno

A copak by ta knihovna nemohla pracovat inkrementálně? Jako filtr – z jedné strany bude přijímat HTML bordel a z druhé strany z ní půjde well-formed XML/XHTML. Stejně to funguje např. s kompresí nebo šifrováním – z jedné strany proud komprimovaných dat, z druhé nekomprimovaných (a nemusí se čekat na konec souboru, filtrovaná data se posílají průběžně).

Pavel Šimerda
25. 10. 2011 9:55 Nový

Re: takže to shrňme

celé vlákno

Jestli je Tidy víceprůchodové, tak by šlo použít nějaké zjednodušené jednoprůchodové Tidy. Neříkám, že by to tak být mělo nebo nemělo, ale IMO si to rozhodně nezaslouží poznámku o divoké party.

Jirka Kosek
25. 10. 2011 10:06 Nový

Re: takže to shrňme

celé vlákno

A proč už teda nemít rovnou jen jeden prohlížeč? (Když může být společná jedna knihovna, tak proč ne více?)

Současná specifikace HTML5 přesně popisuje, jak se zotavit z chyb v kódu a všechny hlavní prohlížeče už to mají implementované (některé zatím jen v beta verzích).

Navíc cesta XML -> Tidy -> XML není zpětně kompatibilní se stávajícími stránkami, jak se ošetří třeba document.write?

Zdeněk Kopš
25. 10. 2011 17:29 Nový

Re: takže to shrňme

celé vlákno

Kdyby se takhle globalizovalo (jedna knihovna, jeden prohlížeč, atd...), není třeba ošetřovat document.write - jednoduše by se javascript začal vyhodnocovat až po načtení stránky nebo by se při prvním pokusu o manipulaci s DOMem pozastavil do doby, než se celý DOM načte (přičemž onload považujme jako protažení všech bajtů procedurou download->XML->Tidy>XML).

Kéž taková doby nikdy nepřijde.

Jirka Kosek
25. 10. 2011 17:35 Nový

Re: takže to shrňme

celé vlákno

Takhle jednoduše to nejde, document.write() přímo zapisuje do streamu, který se právě parsuje a vyhodnocuje.

Jestli si chcete zkazit večer, můžete se podívat na odpovídající část specifikace: http://dev.w3.org/html5/spec/Overview.html#dynamic-markup-insertion

Zdeněk Kopš
25. 10. 2011 18:53 Nový

Re: takže to shrňme

celé vlákno

Tak by document.write nebylo :))))

Bedňa
Bedňa (neregistrovaný) ---.178-41-78.t-com.sk
24. 10. 2011 22:39 Nový

Re: Polyglot aneb webovým kodérem pod obojí

celé vlákno

Starý známy odporca XHTML sa nezaprie :) rovnako som mu nikdy neprišiel na chuť a prečo ho potom preháňať cez HTML parser aby to fungovalo všade, už úplne stráca zmysel. Pekný článok a dík za knihy s ktorých som čerpal prvé skúsenosti.

maryo
maryo (neregistrovaný) 194.213.211.---
25. 10. 2011 7:46 Nový

Re: Polyglot aneb webovým kodérem pod obojí

celé vlákno

Nekdy proste HTML nestaci. Napr. nejakej ten opengraph protokol apod. Proto pisu XHTML, protoze vetsinou nevim, jestli dokument nejaky XML obsahovat v budoucnu nebude. A kdyz jo, tak staci upravit hlavicku.

Jirka Kosek
25. 10. 2011 9:16 Nový

Re: Polyglot aneb webovým kodérem pod obojí

celé vlákno

A s jakým MIME typem posíláte XHTML+OpenGraph do prohlížeče?

Jestli je to text/html, tak se zcela špatně interpretují jmenné prostory - schválně se podívejte co vám budou vracet vlastnosti localName a namespaceURI pro elementy jako fb:like

Jestli je to application/xhtml+xml, co na to IE8-?

Honza
Honza (neregistrovaný) 2001:1488:ac14:----:----:----:----:----
25. 10. 2011 10:26 Nový

Tabulátor/Tabelátor

celé vlákno

Asi vám to bude připadat jako malichernost, ale já se přiznávám, že mě trochu vytáčí, když někde čtu slovo "tabelátor". Vytvářím přece tabUlky a ne žádné tabElky! Tabelátor je stroj na snímání děrných štítků. Viz http://cs.wikipedia.org/wiki/Tabulátor

Jirka Kosek
25. 10. 2011 10:48 Nový

Re: Tabulátor/Tabelátor

celé vlákno

Nojo, tak dlouho jsem se o tom kdysi dávno s někým přel, až jsem to tu napsal špatně.

Nicméně většina slovníků v současnosti obě slova považuje za synonyma. A opírat se v takovýchto případech o Wikipedii jako autoritativní zdroj mi připadá přinejmenším úsměvné.

Jan Prachař aura:46
26. 10. 2011 13:10 Nový

Zlatá střední cesta

celé vlákno

Používáme striktnější syntaxi než HTML inspirovanou v XHTML (malá písmena, atributy v uvozovkách, uzavírací tagy apod.), ale ne tak striktní jako polyglot. Důvod je prostý: aby měl zdrojový kód nějakou kulturu, dobře se četl, byl přehledný.

http://zee.cz/ aura:46
26. 10. 2011 16:43 Nový

Parser

celé vlákno

Když použiji na webu HTML5 Polyglot, jaký parser se použije v moderních prohlížečích? Je to přece text/html, takže se vybere HTML parser, je to tak?

Jirka Kosek
26. 10. 2011 16:47 Nový

Re: Parser

celé vlákno

Záleží na MIME typu, který pošlete:

S nástupem XHTML se do prohlížečů přidal ještě parser XML. Jakým parserem se stránka bude načítat, řídil MIME typ zasílaný do prohlížeče. Stránky označené pomocí text/html se zpracovávaly pomocí parseru HTML a stránky označené pomocí jednoho z MIME typů application/xhtml+xml, application/xml nebo text/xml se pak načítaly pomocí parseru XML.

http://zee.cz/ aura:46
26. 10. 2011 17:40 Nový

Re: Parser

celé vlákno

Aha, už to chápu. Díky! Nedošlo mi, že můžu HTML5 poslat s MIME application/xhtml+xml.

Lojza
Lojza (neregistrovaný) 83.136.201.---
26. 2. 2012 15:59 Nový

Článek je jen dalším argumentem pro HTML 4

celé vlákno

Prostě a jednoduše, nic nového to nepřináší, ale umožňuje to absurdně složité kostrukce. Bomba.

Pominu zásadní faktickou chybu článku co se týče IE a datumu - více než polovina instalovaných IE verzi 9 jentak nepotká, neboť tato jaksi nefunguje pod stále oblíbenými a po těch deseti letech i celkem doladěnými win XP. IE9 navíc rozhodně neumí HTML5 tak, aby to dávalo smysl, tedy podpora jednoho mimetypu situaci rozhodně nezachrání. Alespoň je IE9 natolik rychlý a stabilní, že už uživatele nenutí instalovat jiné mamuty ala ff, chrome či opera.

Čili jakékoliv novější pokusy než html4 stále znamenají, že uživatel stránky vůbec nemusí vidět korektně. Dokud se jedná o stránky zábavné, je to putýnka, ale pokud se v něčem novějším kóduje projekt, kde je hlavní obsah (nedejbože státní web, jehož využití je povinné), je to důkazem nedostatečné přemýšlivosti jeho autorů. No snad tak za 5-10 let bude HTML5 reálně použitelné, ale to bude web dávno přepaný polofunkčními implementacemi HTML6,7,8 a dalšími v mezičase vytvořenými úlety. Browsery budou z důvodu nutnosti podpory desítek nesmyslných formátů zas o neco náročnější a padavější, takže řada lidí bude preventivně používat starě, starší až archeologické verze - FF, resp tehdy ještě Firebird verze 0.7 je asi slušným etalonem toho, jak by měl být browser rychlý a stabilní.

Tedy článek sice hezky kritizuje nekorektní modernistický postup, ale z úplně špatného úhlu.

Zasílat nově přidané příspěvky e-mailem