phpFashion

Rubrika HTML & co

Rylnou falou

Jako blesk z čistého nebe přišla od Google tisková zpráva přivádějící v život atribut rel="nofollow". Měl by se stát postrachem spammerů, zatím však zneklidňuje spíše SEO odborníky. Nakonec, v SEO sféře panuje poslední dobou docela nuda, takže konečně je o čem diskutovat.

Když teda jinak nedáte, podělím se s Vámi, drazí čtenáři, i o svůj názor. A bude vesměs Pragmatický (ačkoliv žiji v Brně).

Nepropadejte panice

Především – nevidím v tom naprosto žádnou tragédii. Proč? Protože hlavním zájmem Google je přece provozovat kvalitní vyhledávač, který vrací co nejrelevantnější výsledky.

Zavedením rel="nofollow" dává jasně najevo, že situace už není taková, jako před pár lety, a že úroveň vyhledávání nevylepší pouze vývojem algoritmů, ale potřebuje spolupráci i od webmasterů.

Tak nabídl rel="nofollow", jako skvělý a snadný způsob, jak odlišit významné odkazy od těch nepodstatných, bez nutnosti znásilňovat elementy <h1> a jemu podobné. Sice vedle šesti úrovní titulků je tato metoda poněkud binární (nikoliv bizarní), nicméně jsem rád, že existuje. A ať se o něm píše i v učebnicích HTML a slabikářích!

Odkazuj a bude Ti odkazováno

Nikde však není řečeno, jak bude Google na atribut rel="nofollow" pohlížet. Je tu všeobecná představa, že takové odkazy bude prostě ignorovat. Ta se nejspíš zakládá na tiskové zprávě, jenže tiskové zprávy nestvořil Bůh proto, abychom jim věřili, ale proto, aby měli jeho nezdárná dítka co psát a říkat si u toho manageři. Hehe, z toho jejich povídání aby člověk nakonec měl pocit, že Google to celé dělá z lásky k blogerům a chce je chránit před spammery 🙂

Mám za to, že přítomnost Rylnou-falouckého atributu bude jen dalším faktorem, další proměnnou ve výpočetních algoritmech Google. A s dolaďováním tohoto vzorce se bude měnit i jeho význam a důležitost. Je tedy úplně možné, že nevhodně nebo přehnaně použitý rel="nofollow" bude znamenat bodíky mínus i pro zdrojovou stránku. A až tohle nějakého anglicky mluvícího SEO guru napadne, bude zase o čem psát…

Pokud jste několik posledních dní strávili jakoukoliv příjemnější činností než sezením u komplu a informace o rel="nofollow" Vám unikla, můžete si víc přečíst na tomto Yuhůově rozcestníku.


Bohové jsou šílení: Jiří Kosek nerad XHTML

Jiří Kosek napsal svůj první článek na Interval.cz a hned jím rozpoutal bouřlivou diskuzi. Je v ní víc vášně než argumentů. Kdyby autorem článku nebyl pisatel tak zvučného jména, zřejmě by byl v komentářích rychle odbyt.

Z toho celého u mě převládají dva dojmy:

  1. pozitivní: je tu velká spousta webdesignérů, kteří mají zájem tvořit kvalitní weby moderním způsobem
  2. negativní: spousta diskutujících brání své vyznání a haní opačné se zřejmým fanatismem, místo argumentů nastupují emoce

Z hlediska zápisu je mezi HTML 4.01 a XHTML 1.0 tak drobný rozdíl, že jít kvůli tomu do zbraně je absurdní. Ale děje se to. Což potvrzuje fanatický přístup k problematice. Zkusím poukázat na několik paradoxů:

Paradox č. 1

Skalní zastánci oddělování obsahu (HTML) od formy (CSS) nejsou schopni oddělit diskuzi o HTML od diskuze o CSS.

Přitom XHTML a HTML mají naprosto tytéž prostředky, jak CSS implementovat. Taktéž značka FONT je v označena jako Deprecated už v HTML 4.

Paradox č. 2

„Internet Explorer není schopen zobrazit XHTML stránky,“ tvrdí diskutující v komentáři, který napsal v MSIE a odeslal z XHTML validní stránky Intervalu.

XHTML verze 1.0 je navrženo tak, aby jej bylo možné zobrazit i ve straších prohlížečích, jako je například IE. Otázkám zpětné kompatibility je věnován dodatek C specifikace.

Paradox č. 3

O tom, že stránka je v XHTML větší a zabírá více místa, je možné vést stovky kilobajtů zbytečných diskuzí.

Úvahy nad úsporou datového objemu bývají obvykle užitečné. Třeba v oborech, které se zabývají komprimací videa a hudby. Uvažovat nad bajtíky je mrháním časem.

Paradox č. 4

„HTML dovoluje ‚prasárny‘, které Vám u XHTML neprojdou“ soukal ze sebe, zatímco se cpal pizzou, drobky mu padaly na klávesnici a pak mastnou rukou klikl na tlačítko odeslat.

Jste-li prasátka a máte-li rádi bordýlek, ať už v kódu, na disku nebo ve svém pokoji, nepomůže Vám ani XHTML. Chyba není na straně W3C, ale ve špatné výchově, kterou Vám rodiče poskytli 😉

Paradox č. 5

XHTML píší odborníci, HTML laici.

Asi nejdůležitější moment: Pokud pod pojmem XHTML chápete správně sestavenou a platnou XHTML stránku, tak je nutné i pod pojmem HTML chápat jen správně sestavený dokument. Ačkoliv si spousta designérů myslí, že také tvoří HTML, často to není pravda. Prostě píší textový soubor s využitím HTML značek, který umí jejich prohlížeč nějakým způsobem zobrazit.

Takže obojí, jak HTML tak i XHTML, vyžaduje od autora výbornou znalost problematiky.

A tímto bych článek uzavřel. Sám používám výhradně XHTML z důvodu kompatibility s XML. Ta otevírá dveře do dalších dimenzí zpracování dokumentů. Na druhou stranu vím, že převod HTML >> XHTML je proveditelný plně automaticky.


RSS a problémové entity

XML

Co mi to milá RSS čtečko, co mi to děláš? Všechny browsery si s HTML entitami perfektně rozumí, jen ty ty entity mršíš.

To Vám prostě takhle ráno napíše Jiří Bureš, že jeho čtečka nekousne La Trinní RSS. Tak jsem si prohlédl generovaný dokument a na první pohled se zdál být ok. Našel jsem si na webu Feed Validátor a ejhle! Diagnóza zní: nedefinované entity. Ale jen v některých verzích RSS.

Tak nezbývalo, než se seznámit s problematikou RSS více do hloubky, abych dospěl k zjištění, že existuje hromada různých verzí, které mají společnou snad jen tu vlastnost, že jsou vzájemně nekompatibilní. Paráda. A protože odlišné verze staví na odlišných DTD, mají také (ne)definované jiné entity. Tedy např. &shy; v jedné verzi funguje, v druhé nikoliv.

Řešením by bylo přidat do DOCTYPE další DTD. Myšlenka je to elegantní, bohužel téměř žádná čtečka to nekousne. Takže rychle ze slepé uličky ven.

Jak na to

Problém lze vyřešit jednoduchou fintou: místo zápisu &nbsp; použít ekvivalentní &#160;. Ale to už jsme jen krůček od úplného odstranění entit – místo &#160; lze prostě přímo vložit znak s kódem 160. Pokud je RSS kódované v UTF-8, je taková transformace bezztrátová (vnější tvář dokument zůstane nezměněna). Samozřejmě entity &amp; &lt; &gt; znakem nahradit nelze, je třeba zůstat u mezikroku, tedy &#38; &#60; &#62;.

Mám pocit, že tvůrce RSS kanálů a čteček nenapadlo, že existují i jiné znaky, než jen ty z anglické abecedy. Ach jo.


Jak na formuláře: POST a GET

formulář

Pokud máte za to, že Post a Get jsou bratranci Čuka a Geka, musím Vás hned předem varovat: „tento článek je určen tvůrcům webových stránek“. Takže čtěte jen tehdy, je-li webdesign Vaším čálkem šaje 😉

Při tvorbě HTML formuláře máme k dispozici dvě metody, jak odeslat data zpět serveru: POST a GET. Data odeslaná metodou GET se stanou součástí URL, doplní se za otazník a jsou tedy vidět v adresním řádku prohlížeče. Naopak metoda POST data odesílá odděleně od URL. Předpokládám, že tohle asi všichni znáte.

Zkusme jít trošku do hloubky. Metodu GET není třeba spojovat jen s formuláři. Jakékoliv stažení objektu ze serveru je provedením příkazu GET. Vyvolá jej každé kliknutí na odkaz <a href=...>, transparentně jej provede <img src=...>.

POST je ryze formulářová záležitost. Jak jsem uváděl, data se odesílají mimo URL – to se ovšem týká jen položek formuláře. Zároveň je totiž možné odesílat ještě další data v URL, které je uvedeno v action formuláře. Zjednodušeně řečeno, POST umí totéž co GET a ještě o dost víc.

Kdy použít GET a kdy POST?

Protože často tvořím internetové aplikace, kde se to formuláři jen hemží, snažil jsem se odvodit nějaké univerzální pravidlo, kdy použít kterou metodu:

Použijte POST, pokud

  • odeslání formuláře způsobí vnitřní změnu serveru (zápis do databáze, odeslání e-mailu, …) čtěte poznámku 1
  • odesílaná data nejsou zcela veřejná
  • velikost dat může překročit 1000 bajtů (čtěte poznámku 2)

V ostatních případech lze použít GET.

Toto pravidlo mějte na zřeteli i tehdy, když tvoříte „GET bez formuláře“, tedy prostý odkaz <a href=...?paramtery>. Pokud pravidlo říká, že je třeba použít POST, nahraďte přímý odkaz formulářem POST s tlačítkem. Nebo alespoň změňte odkaz tak, aby vedl na potvrzovací formulář. A teprve po jeho odkliknutí proveďte akci. Je to především opatření proti robotům, kteří by mohli při procházení webu nadělat škodu.

Poznámka 1: Při zpracování položek formuláře je třeba ověřit, zda byly skutečně odeslány jako POST. V PHP pomůže důsledné používání superglobálního pole $_POST.

Pokud je nežádoucí, aby refresh stránky nebo návrat v historii prohlížeče způsobil znovuodeslání formuláře, přesměrujte se po zpracování na další stránku hlavičkou Location:

header('Location: http://www.example.com/');

Poznámka 2: Pokud formulářem odesíláte soubory, nezapomeňte mu nastavit enctype="multipart/form-data".

Jde o zabezpečení

Zde uvedené principy a pravidla mají za úkol jediné: pomoci zabezpečit Váš web či aplikaci. Ať už před koumákem, který se ji pokouší nabourat záměrně, nebo před robotem, který tak činní v tupé nevinnosti.

Roboti zkoumající Váš web zkusí otevřít každou adresu, stáhnout každou stránku. Je to jejich úkol a dost možná, že je to i baví. Jediná věc, před kterou se zastaví, jsou formuláře. A právě proto jsem varoval před odkazy, které suplují formuláře. Je třeba je používat s rozvahou.

p.s.: Jste-li autorem webové aplikace, zkuste se zamyslet: jak by to dopadlo, kdyby se do administrační části náhodou dostal robot?


Rendered Source aneb jak zobrazit generovaný kód

source code

Jako slepec na střelnici, který se marně snaží trefit růži. Tak si připadám při ladění JavaScriptu, který generuje HTML výstup. Pokud se napoprvé netrefím, hledání chyb bývá zdlouhavé a nervy drásající.

Nesmírně užitečnou pomocí je proto vypsání kódu, který prohlížeč skutečně zobrazuje (rendered source). Tohle dokáže Internet Explorer díky své proprietární vlastnosti outerHTML. Stačí tedy nějakým způsobem zobrazit následující:

document.documentElement.outerHTML

Na Choseho blogu je popsáno jednoduché řešení využívající značky XMP. Bohužel se tím přepíše původní obsah okna, podívejme se tedy po elegantnějším řešení. Aby umělo tyto vychytávky:

  • aktivace přes kontextové menu
  • zobrazení zdrojového kódu do nového okna
  • při označení části stránky se zobrazí jen její kód

…pokračování


phpFashion © 2004, 2025 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.