URL: https://linuxfr.org/news/validite-html-des-pages-sur-linuxfr-org Title: Validité HTML des pages sur LinuxFr.org Authors: Benoît Sibaud yPhil, pulkomandy, BAud, Nils Ratusznik, Yves Bourguignon, bobble bubble, Ysabeau, NeoX et tisaac Date: 2018-10-06T18:34:56+02:00 License: CC By-SA Tags: html Score: 5 Un matin (le 6 octobre 2018), une question existentielle a fait jour dans mon esprit, comme ça, venue d’on ne sait où. Et dont on voit le caractère urgent et prioritaire quelques années plus tard. Une idée probablement dans le même genre que l’envie pas gagnée de Sir Tim Berners-Lee de rendre à l’utilisateur le contrôle via le [projet Solid](https://solid.mit.edu/), ou les râleries sur la [dérive obésitaire du logiciel](https://blog.romainfallet.fr/desenchantement-logiciel/) (évoquée en [journal](https://linuxfr.org/users/vincentd/journaux/un-developpeur-qui-denonce)) ou la quête graalesque du poétique oxymore de la [DRM ouverte interopérable standard accessible](https://www.actualitte.com/article/lecture-numerique/une-drm-ouverte-basee-sur-lcp-en-passe-de-devenir-un-standard/90877). Bref, je me demandais « les pages produites par LinuxFr.org sont-elles valides niveau HTML, et est‐ce que (plutôt comment) ça a changé au fil des années ? ». Évidemment, ça ne donnera un état et une évolution que sur les contenus/commentaires du site, et pas sur Internet en général (même si certains ne connaissent d’Internet que leur réseau social préféré, mais ceux‐là ne nous intéressent pas ici, car soit ils ne viennent donc pas sur LinuxFr.org, soit ils y sont en permanence mais ne mettent pas de liens pour en sortir vu qu’ils n’en sortent pas). ---- ---- # HTM-quoi? Le [HTML](https://fr.wikipedia.org/wiki/Hypertext_Markup_Language) est le langage du web. Il permet de structurer et de mettre en page le contenu de tous les sites internet. Il est proche du XML, mais plus spécifique et moins strict. Comme dans tous les langages, il est possible de faire des erreurs qui rendent le fichier invalide. Par exemple, l’utilisation de balises qui n’existent pas, des balises ouvertes et jamais fermées (comme cela peut arriver avec des parenthèses, ou une utilisation incohérente des balises (par exemple un élément de liste qui ne serait pas dans une liste). Le navigateur [se débrouille alors comme il peut pour afficher quelque chose](https://developer.mozilla.org/fr/docs/Web/HTML/Quirks_Mode_and_Standards_Mode).[^1] [^1]: https://xkcd.lapin.org/index.php?number=859#strips ) ;-) Cela peut provoquer des problèmes d’affichage, nuit à l’accessibilité, et complique la conversion des documents dans d’autres formats. Historiquement, les dépêches sur LinuxFr.org étaient écrites et stockées directement en HTML, aujourd’hui, c’est le format Markdown qui est utilisé, avec une conversion en HTML pour l’affichage sur le site. # C’est plus compliqué que prévu Faisons simple. On commence par les dépêches, en se limitant à la première et la seconde partie (on a déjà [vérifié les liens](https://linuxfr.org/news/evolution-des-hyperliens-sur-linuxfr-org) précédemment, et dans l’immédiat on fera l’hypothèse qu’il n’y a pas de souci sur le titre, les étiquettes, les infos sur les auteur(s)/contributeur(s)/modérateur(s), les dates, etc.), et on ne va pas regarder les commentaires. On extrait brutalement la concaténation du HTML stocké pour les deux parties d’une dépêche, on ajoute des début/fin de document HTML qui vont bien, et on utilise [_tidy_](http://www.html-tidy.org/) pour vérifier si on a obtenu une page valide, pour chaque dépêche. Le HTML des deux parties est produit à partir de Markdown pour les dépêches créées depuis la [migration RoR](https://linuxfr.org/news/nouvelle-version-de-linuxfrorg--2) en février 2011, et directement pour les dépêches créées avant et les milliers de [dépêches anciennes réinjectées](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000) en 2012. # Les dépêches ## L’état initial Voyons déjà comment a évolué la validité des dépêches (par série 4xxx, on entend ici les dépêches existantes numérotées de 4000 à 4999, par valide un code de retour de tidy de 0 et par invalide un code de retour de 1). (analyse faite le 6 octobre 2018 et portant sur les dépêches publiées aux numéros allant de 1 à 38818, pour un total de 25249 dépêches) série | HTML valide | HTML invalide | total | source HTML | source Markdown | commentaire ------|--------|----------|-------|------|----------|----------------- 0xxx | 593 (97 %)| 13 (3 %)| 606 | 606 (100 %) || 1xxx | 576 (96 %)| 21 (4 %)| 597 | 597 (100 %) || 2xxx | 585 (96 %)| 24 (4 %)| 609 | 609 (100 %) || 3xxx | 579 (96 %)| 23 (4 %)| 602 | 609 (100 %) || 4xxx | 531 (96 %)| 18 (4 %)| 549 | 609 (100 %) || 5xxx | 491 (97 %)| 13 (3 %)| 504 | 503 (99 %) | 1| 6xxx | 540 (96 %)| 18 (4 %)| 558 | 558 (100 %) || 7xxx | 492 (95 %)| 23 (5 %)| 515 | 514 (99 %) | 1| 8xxx | 565 (94 %)| 31 (6 %)| 595 | 595 (100 %) || 9xxx | 582 (96 %)| 23 (4 %)| 605 | 605 (100 %) || 10xxx | 625 (98 %)| 11 (2 %)| 636 | 635 (99 %) | 1| 11xxx | 559 (98 %)| 10 (2 %)| 569 | 569 (100 %) || 12xxx | 484 (97 %)| 14 (3 %)| 498 | 498 (100 %) || 13xxx | 419 (96 %)| 17 (4 %)| 436 | 436 (100 %) || 14xxx | 503 (98 %)| 10 (2 %)| 513 | 513 (100 %) || 15xxx | 408 (96 %)| 12 (4 %)| 420 | 419 (99 %) | 1| 16xxx | 406 (96 %)| 16 (4 %)| 422 | 422 (100 %) || 17xxx | 409 (95 %)| 20 (5 %)| 429 | 429 (100 %) || 18xxx | 463 (98 %)| 9 (2 %)| 472 | 472 (100 %) || 19xxx | 440 (93 %)| 28 (7 %)| 468 | 468 (100 %) || 20xxx | 484 (94 %)| 26 (6 %)| 510 | 510 (100 %) || 21xxx | 567 (94 %)| 36 (6 %)| 603 | 603 (100 %) || 22xxx | 479 (91 %)| 43 (9 %)| 522 | 522 (100 %) || 23xxx | 585 (90 %)| 60 (10 %)| 645 | 644 (99 %) |1| 24xxx | 663 (88 %)| 85 (12 %)| 748 | 748 (100 %) || 25xxx | 612 (83 %)| 117 (17 %)| 729 | 727 (99 %) |2| 26xxx | 610 (82 %)| 127 (18 %)| 737 | 736 (99 %) |1| 27xxx | 583 (76 %)| 183 (24 %)| 766 | 678 (88 %) |88 (12 %)| [migration technique RoR et début du Markdown](https://linuxfr.org/news/nouvelle-version-de-linuxfrorg--2) 28xxx | 680 (83 %)| 136 (17 %)| 816 || 816 (100 %)| 29xxx | 881 (92 %)| 68 (8 %)| 949 | 525 (55 %) | 424 (45 %) | [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000) 30xxx | 991 (100 %)| 0 (0 %)| 991 | 991 (100 %) || [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000) 31xxx | 998 (99 %)| 2 (1 %)| 1000 | 999 (99 %) |1| [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000) 32xxx | 965 (98 %)| 10 (2 %)| 975 | 903 (92 %) |72 (8 %)| [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000) et aussi un code de retour 2 33xxx | 762 (89 %)| 90 (11 %)| 852 ||852 (100 %) 34xxx | 810 (95 %)| 35 (5 %)| 845 |1 (1 %)|844 (99 %) 35xxx | 830 (99 %)| 2 (1 %)| 832 || 832 (100 %) 36xxx | 805 (99 %)| 3 (1 %)| 808 || 808 (100 %) 37xxx | 714 (98 %)| 13 (2 %)| 727 || 727 (100 %) 38xxx | 577 (97 %)| 14 (3 %)| 591 || 591 (100 %) Commençons déjà par nettoyer ce vilain code de retour 2 sur une dépêche réinjectée, pour cause de balise `` non échappée (ça ne s’invente pas)``. Et profitons-en pour convertir cette dépêche en Markdown, ça fera toujours ça de moins à faire lors de la prochaine migration technique. Quels sont donc les soucis sur les 1404 dépêches invalides au 6 octobre 2018 (soit 5,6 %) ? (devenues 1131 invalides sur 25 803 soit 4,4% au 29 décembre 2019) ## Des exemples de HTML fait main invalides On parle donc des contenus en HTML datant d’avant la migration de 2011 à Ruby On Rails et qui n’ont pas (encore) été convertis en Markdown. ### Des esperluettes mal codées dans des liens La source initiale est ici en HTML fait main : ```html lien lien ``` pour éviter _Warning: unescaped & or unknown entity "&mode"_ _Warning: unescaped & or unknown entity "&tid"_ ## Des exemples de Markdown produisant du HTML invalide Disons-le d’ores et déjà, une entrée de suivi a été créée pour [éviter que le Markdown ne produise du HTML invalide](https://linuxfr.org/suivi/eviter-que-le-markdown-ne-produise-de-l-html-invalide). ### Hyperlien décrit, mais sans URL ```markdown [Description d’un lien mais pas de lien]() ``` ```html Description d’un lien mais pas de lien (href non rempli) ``` _Warning: `` attribute "href" lacks value_ ## Tableau mais sans contenu ```markdown |Colonne 1|Colonne 2| |---------|---------| ``` ```html (tbody vide) ``` _Warning: trimming empty ``_ ## Élément de liste vide ```markdown * coin * ``` avec un `
  • ` vide invalide ```html ``` _Warning: trimming empty `
  • `_ ### Spans vides sur la coloration syntaxique ```php EOT; ?> ``` avec deux `` vides ```html
    <?php
    class Hello {
        static $t = <<<EOT
    <br/>
    EOT;
    ?>
    ``` _Warning: trimming empty ``_ ## Conversion de lien Wikipédia ```markdown [[Benoît Mandelbrot]] ``` qui produisait avant l’invalide `href` avec espace ```html Benoît Mandelbrot ``` mais qui a été corrigé depuis en ```html Benoît Mandelbrot ``` donc il suffit de forcer la régénération du HTML depuis le Markdown. ### Réinitialisation de l’indice des notes de bas de page entre la 1ʳᵉ partie et la 2ᵈᵉ partie [Entrée de suivi déjà existante](https://linuxfr.org/suivi/reinitialisation-de-l-indice-des-notes-de-bas-de-page-entre-la-1-partie-et-la-2-partie) _Warning: `` anchor "fnref1" already defined_ _Warning: `
  • ` anchor "fn1" already defined_ # C’était plus compliqué que prévu, mais est-ce que c’est mieux après ? Durant le bref temps de rédaction de cette dépêche, soit entre le 6 octobre 2018 et le 30 décembre 2021, le site est passé de 25 249 dépêches publiées à 26 692 dépêches publiées. Regardons ce qui a changé. série | HTML valide 2018 | HTML invalide en 2018 | %HTML invalide 2018 | source HTML 2018 | source markdown 2018 | %source markdown 2018 | HTML valide 2021 | HTML invalide 2021 | %HTML invalide 2021 | source HTML 2021 | source markdown 2021 | %source markdown 2021 | total dépêches ------|--------|----------|-------|------|----------|------------------------|---------------------|-------------------------|--------------------------|---------------------|-----------------------|------------------------|-------------|---------------- |--------------------------|-------------- 0xxxx | 5534 | 207 | 3,6% | 5805 | 2 | 0,0% | 5593 | 147 | 2,6% | 5639 | 101 | 1,8% | 5740 1xxxx | 4716 | 147 | 3,0% | 4861 | 2 | 0,0% | 4765 | 98 | 2,0% | 4731 | 132 | 2,7% | 4863 2xxxx | 6144 | 881 | 12,5% | 5693 | 1332 | 19,0% | 6413 | 612 | 8,7% | 4872 | 2153 | 30,6% | 7025 3xxxx (*)| 8296 | 188 | 2,2% | 3222 | 5262 | 62,0% | 8301 | 183 | 2,2% | 315 | 8169 | 96,3% | 8484 4xxxx | | | | | | | 566 | 14 | 2,4% | 0 | 580 | 100,0% | 580 total | 24690 | 1423 | 5,4% | 19581 | 6598 | 25,2% | 25638 | 1054 | 3,9% | 15557 | 11135 | 41,7% | 26692 (*) données extrapolées de 7621 à 8484 dépêches pour correspondre à 2021 # Conclusions ? - de nombreuses dépêches sont désormais valides niveau HTML (369 devenues valides en absolu, et passage de 5,4% d’invalides à 3,9% en relatif) ; - il y a moins de pages en HTML « en dur » et davantage en Markdown, ce qui facilitera de futures migrations (4024 converties en absolu, et passage de 25,2% à 41,7% en relatif) ; - on en déduit que dans à peine une dizaine d’années à ce rythme, tout sera valide et en markdown (promesse non contractuelle) ; - petit rappel, on avait dit « _faisons simple_ » donc là n’ont pas été regardés les journaux, les entrées de forum, les sondages, les liens, les pages wiki, les entrées du suivi, les commentaires, les titres, les étiquettes, les infos sur les autrice(s)/contributrice(s)/modératrice(s), les dates, etc. ; - ajout du pénible : notons que tidy a probablement des limites aussi, et puis n’ont pas été regardés le Javascript ou les feuilles de style CSS ou l’EPUB ou… bref vous avez l’idée ; - une entrée de suivi a été créée pour [éviter que le Markdown ne produise du HTML invalide](https://linuxfr.org/suivi/eviter-que-le-markdown-ne-produise-de-l-html-invalide).
  • Colonne 1 Colonne 2