Forum Astuces.divers Nettoyer un code HTML sale

Posté par  (site web personnel) .
Étiquettes : aucune
3
1
mai
2009
Bonjour,

J'ai eu l'occasion de me plonger dans un code HTML qui doit dater d'il y a assez longtemps car je "remet à neuf" un vieux site.

Pour les curieux, le "code" est de ce genre. Il est sale, conçu pour les polices Windows (déclarées à chaque balise !), et lourd.

Mon script se charge donc de faire quelques regex là dessus (pas de DOM, ce machin n'est absolument pas compatible XML), et réussi à me sortir un résultat tel que celui-là, propre, clair, net, indenté, et sémantique (même les pseudo-listes à puces à base de "1. truc 2. machin" sont converties en belles listes !).

Le code en question n'est qu'une suite de regex. Malheureusement, il n'est adapté qu'au "codeur" qui a créé ce site (je soupçonne FrontPage de faire un truc pareil), et n'est adapté qu'au nettoyage de tables. C'est déjà suffisant, car les tables sont très difficiles à nettoyer "à la main" (comptez 30 minutes pour mon exemple, en le faisant bien).

Avec mon script, une simple ligne de commande vous sort le résultat :D : le script.

Il s'utilise tout simplement :

php converttables sourcefile.html destfile.html

sourcefile.html n'est pas modifié.

PS: Si vous êtes attentif, vous remarquerez que dans toute une partie du script, les tabulations sont remplacées par des "####". C'est simple : si je mets "\t" à la place, la regex ne fait rien ! Je ne sais pas où se situe le bug, mais c'est étrange.
  • # Et tidy ?

    Posté par  . Évalué à 5.

    Est-ce que HTML_Tidy ne t'aurait pas convenu ?
    • [^] # Re: Et tidy ?

      Posté par  (site web personnel) . Évalué à 5.

      J'ai regardé, et non, il n'aurait pas convenu.

      Pour une utilisation 'normale', il semble être parfait, mais ici, c'est vraiment un gros décrassage, donc se débarrasser des [font], transformer de simples listes avec des '1. ceci 2. cela' en belles listes HTML, etc.

      Merci quand-même, ça m'a fait découvrir un programme :) .
    • [^] # Re: Et tidy ?

      Posté par  . Évalué à 8.

      Ajax ! Ca nettoie bien le HTML
  • # complexité

    Posté par  . Évalué à 1.

    Je ne connais pas php, mais j'ai l'impression que tu parses le fichier en entier pour chaque expression régulière/substitution: ce serait bien plus efficace de le lire ligne par ligne.
    • [^] # Re: complexité

      Posté par  (site web personnel) . Évalué à 3.

      Effectivement, tout le fichier est parsé à chaque fois, mais c'est obligatoire, car comme montré dans le code d'origine, les lignes sont ... douteuses :


      [td][span font='arial' font-size=12px][strong]machin
      sur deux lignes[/strong]
      [/span]
      [/td]


      Devient un très beau code de la sorte, réorganisé :


      [td]
      machin sur deux lignes
      [/td]


      En fait, la correction se fait en plusieurs étapes :


      * Sauvegarde de quelques balises (les tr par exemple)
      * Suppression de toutes les balises
      * Suppression de tous les espaces et autres, ainsi que des saut de ligne. Ainsi, tout le code se présente sur une seule ligne : «[td]machin sur deux lignes[/td]» ici
      * Indentation avec des regex un peu spéciaux, mais qui marchent

      Le code à la sortie est donc tout beau et tout propre :) .

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.