Logo du Web Design Group

Les problèmes courants

Autres langues : English

Veuillez me contacter si vous pensez à un autre problème courant qui mérite de figurer ici.

Écrire du HTML dans un élément SCRIPT

Une erreur courante (à l'origine de la plupart des faux relevés de bogue à l'encontre du validateur HTML du WDG) est celle produite lors de l'écriture de balises HTML dans un élément SCRIPT :

<script type="text/javascript">
<!--
  // Voici l'erreur !
  document.write("</P>");
// -->
</script>

Comme mentionné par une note de la recommandation HTML 4 à propos de la présence de données non HTML dans le contenu d'un élément, les balises fermantes sont reconnues à l'intérieur des éléments SCRIPT mais pas les autres types de balisage, tels que les balises et commentaires ouvrants. C'est une bizarrerie de SGML pas évidente concernant les éléments définis avec un contenu de type CDATA.

Les auteurs devraient éviter d'employer des chaînes telles que « </P> » dans les scripts incorporés. En JavaScript, on peut utiliser une barre oblique inverse pour empêcher que la chaîne soit interprétée comme du balisage :

<script type="text/javascript">
<!--
  document.write("<\/P>");
// -->
</script>

Remarquez que, dans le cas de XHTML, les auteurs doivent également faire attention aux balises ouvrantes dans l'élément script. Pour des précisions, cf. la section Les éléments script et style (N.d.T. en français) de la recommandation XHTML 1.0 ainsi que les conseils de compatibilité HTML pour les scripts incorporés (N.d.T. en français)

Les esperluettes (&) dans les adresses URL

Une autre erreur commune est celle provoquée par l'inclusion d'une adresse URL contenant une esperluette (&) :

<!-- Ceci n'est pas valide ! --> <a href="machin.cgi?chapitre=1&section=2">...</a>

Cet exemple se traduit par une erreur de « section d'entité inconnue » (N.d.T. unknown entity section) parce que le caractère « & » est censé initier une entité. La plupart du temps, les navigateurs récupéreront sans dommage de l'erreur mais l'exemple ci-dessus entraînera l'échec de la résolution du lien dans Netscape 3.x (cependant, pas dans ses autres versions) car il supposera que l'auteur avait l'intention d'écrire &sect;ion, qui équivaut à §ion.

Pour éviter les problèmes avec les validateurs et les navigateurs, il faut toujours utiliser &amp; au lieu de & lorsqu'on écrit une adresse URL en HTML :

<a href="machin.cgi?chapitre=1&amp;section=2">...</a>

Remarquez que le remplacement du caractère & par &amp; n'intervient que pour l'écriture de l'adresse URL en HTML, où « & » est un caractère spécial (tout comme les caractères « < » et « > »). Si on devait écrire la même adresse URL dans un message électronique en texte brut ou dans la barre d'adresse d'un navigateur, on écrirait « & » et non « &amp; ». Avec HTML, le navigateur traduit « &amp; » en « & », de sorte que le serveur Web ne voit que « & » et non « &amp; » dans la chaîne d'interrogation de la requête.

La mauvaise imbrication des éléments

En HTML, les éléments ne peuvent pas se chevaucher. Le code suivant est invalide :

<B><I>Mauvaise imbrication</B></I>

Dans cet exemple, l'élément B était censé contenir un élément I. Pour qu'il soit réellement contenu dans l'élément B, la balise fermante de l'élément I doit apparaître avant celle de l'élément B. Le code suivant est valide :

<B><I>Bonne imbrication</I></B>

L'utilisation de l'attribut NAME avec les éléments IMG ou FORM

Ce problème est abordé en détails dans la page JavaScript et HTML : possibilités et mises en garde (N.d.T. en anglais).

L'écriture tout en minuscules dans une déclaration DOCTYPE

Dans une déclaration de type de document DOCTYPE, la casse de l'identificateur public formel — la chaîne entre guillemets qui apparaît après le mot-clé PUBLIC — est significative. L'erreur courante consiste à écrire :

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">

L'identificateur public formel (FPI) est en minuscules. Le validateur ne reconnaîtra pas le document comme étant de type « HTML 4.0 Transitional » puisque l'identification FPI attendue pour ce type utilise une casse différente :

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">

Le sous-élément obligatoire de HEAD manquant

Si on obtient le message « Missing a required sub-element of HEAD », il faut vérifier qu'il y ait bien un élément TITLE l'élément HEAD. L'élément TITLE est obligatoire pour tous les documents HTML.