Převod nevalidního HTML na validní XHTML

Už podruhé tento týden, to máme teprve úterý, jsem dostal do ruky nevalidní HTML a měl jsem ho převést do XHTML. Problém nastal v okamžiku kdy jsem zjistil, že HTML obsahuje takové chuťovky jakými jsou HTML tagy <FONT>, <CENTER> a podobně.

Naštěstí je dostatečně známý program TiDy, ale bohužel obsahuje i docela velkou škálu nastavení. Uvádím zde ty, které jsem použil já a s docela dobrým výsledkem. Jediné s čím si TiDy neporadilo bylo <a name="2013344"></a>. Ale s tím už se dá žít a samozřejmě odstranit jinak.

TiDy z konzole

TiDy si můžete celkem snadno nainstalovat příkazem urpmi tidy. Pokud patříte k nešťastníkům s MS Windows navštivte stránku projektu TiDy, je tam něco i pro vás.

TiDy má samozřejmě i spoustu grafických nadstaveb. Je integrována například do editoru PSPad, do výborného rozšíření HTML Validator pro Firefox a podobně.

Spuštění TiDy z konzole:

tidy -f chyby.txt -config config.txt zdroj.html > vysledek.html

V souboru chyby.txt najdete chyby, které TiDy nedokázalo ze souboru odstranit.

Nastavení TiDy je uloženo v souboru config.txt (více k nastavení TiDy):

char-encoding:                  utf8
indent:                         true
show-body-only:                 false
output-xhtml:                   true
add-xml-decl:                   true
doctype:                        strict
clean:                          true
drop-proprietary-attributes     true
enclose-block-text:             true
enclose-text:                   true
bare:                           true
logical-emphasis:               true
alt-text:                       obrazek
fix-uri:                        true
wrap:                           200

To samé v PHP

Podobně můžete s TiDy pracovat v PHP, potřebujete samozřejmě nainstalované rozšíření PHP TiDy.

// promenna $html obsahuje vstupni, nevalidni, HTML
$config = array(
        'indent'                => true,
        'show-body-only'        => false,
        'output-xhtml'          => true,
        'add-xml-decl'          => true,
        'doctype'               => "strict",
        'clean'                 => true,
        'enclose-block-text'    => true,
        'enclose-text'          => true,
        'repeated-attributes'   => true,
        'bare'                  => true,
        'logical-emphasis'      => true,
        'alt-text'              => "obrazek",
        'fix-uri'               => true,
        'wrap'                  => 200,
        'drop-proprietary-attributes' => true
        );
$tidy = new tidy;
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();
echo $tidy;

Pokud s TiDy „nečistíte“ celou HTML stránku, ale jen její část, tak si nastavte show-body-only na true. Můžete si tak třeba vyčistit své články, uložené v databázi, nebo třeba komentáře.

| | Články | Trvalý odkaz | Komentáře (8) | Štítky: , ,


Komentáře:

[1] RD | 8.3. 2006, 10:08

díky za příklad! super věc, jen máte v tomto řádku chybku ‚wrap‘ ⇒ 200 chybí tam čárka…


[2] Jakub Vrána | 8.3. 2006, 10:55

Viz též Převod HTML na XHTML.


[3] Jirka Ch | 8.3. 2006, 12:48 | jiri@chomat.net

[1] … a kus níže byla zase jedna navíc. Děkuji za upozornění, opraveno.
[2] Děkuji za související odkaz. Článek znám, jen jsem si na něj nevzpoměl při psaní spotu.


[4] Lukáš Havrlant | 8.3. 2006, 16:53

Problém nastal v okamžiku kdy jsem zjistil, že HTML obsahuje takové chuťovky jakými jsou HTML tagy <FONT>, <CENTER> a podobně.

XHTML tyto elementy obsahuje také. Mimochodem zvládá to Tidy i opačný převod z XHTML do HTML?


[5] Jirka Ch | 8.3. 2006, 17:21 | jiri@chomat.net

[4] Požadováno bylo XHTML Strict a tam nemá tohle: <FONT SIZE=-2>Jméno</FONT> co dělat. Nemluvím o neukončovaných párových značkách a podobně.

Co se týká převodu do HTML tak stačí nastavit output-xhtml na false a pomocí doctype si specifikovat požadovanou verzi HTML.
Tomu zpětnému převodu, ale moc nerozumím. Stejně dojde jen k vyměnění deklarace HTML v hlavičce dokumentu.


[6] Lukáš Havrlant | 8.3. 2006, 17:47

[5] Jo, už mi taky pomalu dochází, že stačí " />" konvertovat na „>“, vyhodit xml deklaraci a atributy xmlns a případně xml:lang a vyměnit DOCTYPE. To by vlastně měl zvládnout jendoduše i PSPad. Ok, i tak díky :-).

Požadováno bylo XHTML Strict a tam nemá tohle: <FONT SIZE=-2>Jméno</FONT> co dělat.

No, ono to nemá co dělat ani v HTML strict. Ale chápu, já jen moc nemám rád, když se míchá použitý jazyk (HTML x XHTML) a použitá verze jazyka (trans x strict). Tady to tím zavánělo.


[7] Andrtalec | 8.3. 2006, 18:38

Riskujem, že môj nesúvisiaci komentár bude zmazaný. Ale možno mi odpustíte a odpoviete mi. Ako linuxovému začiatočníkovi, poradili by ste mi BlueFish alebo QuantaPlus? Ďakujem.


[8] Jirka Ch | 8.3. 2006, 21:49 | jiri@chomat.net

[6] Hlavně že si rozumíme. Klíčové bylo to, že to HTML co jsem převáděl do XHTML byl bastl nad bastl :-)
PSPad to zmákne už proto, že umí s TiDy spolupracovat.

[7] Komenáře mažu jen v úterý, dnes je středa ;-)
Záleží co od editoru čekáš, co v něm chceš psát a na co jsi zvyklý. Ani jeden ze zmíněných mi nevydržel na disku déle jak den.

Já používám, vlastně na všechno, jEdit. Obsahuje velkou škálu pluginů, které pokývají snad všechny požadavky kladené na dobrý editor.


Vložit komentář:

Přidávání komentářů bylo zastaveno, ale můžete mi napsat třeba email.
Děkuji za pochopení.
~Jirka Chomát~