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 href=„http://­php.vrana.cz/pre­vod-html-na-xhtml.php“ rel=„nofollow“>http:/­/php.vrana.cz/pre­vod-html-na-xhtml.php.


[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 href=„http://­www.jedit.org/“ rel=„nofollow“>http:/­/www.jedit.or­g/. 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~