[résolu] Une question de validation xhtml

  • Auteur de la discussion marsien
  • Date de début

marsien

Grand Maître
Bonsoir,

J'ai une petite question concernant des variations de validation W3C d'un même code html selon qu'on donne à valider soit la page directement à partir de son url, soit la page en local.

Mise en situation : j'ai un tableau avec une ligne d'en-tête et un corps. Le contenu de ce corps est généré en php. Ce qui donne un truc dans ce style :
Code:
<table>
  <thead>
    <tr>
      <th>titre 1</th>
      <th>titre 2</th>
      <th>titre 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>cell1.1</td>
      <td>cell1.2</td>
      <td>cell1.3</td>
    </tr>
    <tr>
      <td>cell2.1</td>
      <td>cell2.2</td>
      <td>cell2.3</td>
    </tr>
  </tbody>
</table>

Donc quand je valide ce code sur le site du W3C à partir de la page php (donc générant le code sur le serveur juste avant la validation), j'ai une erreur me disant que la balise </tboby> n'est pas fermée au bon moment, sans doute parce qu'elle est croisée avec une autre ou parce qu'il lui manque un attribut avant ou à l'intérieur. Je veux bien, mais je vois pas... :??: Et le plus bizarre, c'est que lorsque je teste cette page en local, après avoir copié/collé le code source html (généré par php auparavant) et que je la passe à la moulinette du W3C, ma page est valide :heink:

Et lorsque j'enlève les balises <thead> et <tbody>, ben c'est tout valide, que ce soit en local ou en distant :pt1cable:

Y a-t-il quelqu'un qui peut m'expliquer ce qui ne plait pas au validateur W3C dans le cas de l'analyse d'une url menant vers une page comportant un tableau avec un <tbody> dont le contenu est généré en php.

Merci pour vos éventuelles lumières
:merci:
 

batchy

Grand Maître
la seule difference entre le fait de valider une page distante et valider un fichier c'est les entetes HTTP qui ont disparus.

regarde tes encodages ou d'autres trucs.
 

marsien

Grand Maître
Mon code est bon, et le simple fait d'enlever les <thead> et <tbody> me permet de valider mon code aussi bien en local qu'en distant... C'est ça que je ne comprends pas !

Y aurait-il des spécificités sur ces balises que j'ignorerais ?
 

Johan_et_Pirlouit

Grand Maître
Dans l'extrait de code que tu donnes, tout est manifestement OK..

Ce serait bien que tu puisses nous donner le message d'erreur complet du site du W3C.. Peut-être as-tu une balise autre mal placée avant ou un attribut avec un soucis de guillemet ou je ne sais quoi d'autre : genre un soucis de déclaration DOCTYPE ?.. Il se pourrait que tu aies aussi un problème de codage de fichier ou de page (iso-8859-15 ou utf-8).. Quand on fait un site en utf-8, il est souvent préférable de coder les fichiers dans ce jeu de caractères (Notepad++ -> menu Format -> Encoder en UTF-8), bien que ce ne soit pas toujours vital (cas où on n'utilise que les entités HTML pour les caractères accentués)..

Je viens de tester un tableau ayant la même structure que le tien dans une page complète et en XHTML 1.1 (en Content-Type "application/xhtml+xml") avec tout et tout (calendrier de la page d'accueil de mon futur blog) et pas de pb sur le site du W3C.. Mais je ne pratique que le test par URL, pas par fichier envoyé..

Dans ton script PHP qui gère le DOCTYPE (si tu l'utilises pour cette page ; ici pour ceux qui seraient intéressés >> ), vois si tu n'as pas une erreur qui se serait glissée à la détection du validateur W3C (par exemple) :
[cpp] // Cas des validateurs du World Wide Web Consortium (W3C) et du Web Design Group (WDG)..
// les adresses sont respectivement :
// - http://validator.w3.org/
// - http://www.htmlhelp.com/tools/validator/
if (stristr($navigator, "W3C_Validator") || stristr($navigator, "WDG_Validator")) {
$mime = "application/xhtml+xml";
} [/cpp]
Ou dans ton en-tête HTML (balise <meta http-equiv="Content-Type" ..... />)..

Sinon, je ne vois pas bien [:spamafote]..

:merci:
 

marsien

Grand Maître
La déclaration de doctype est OK il me semble et le codage est de l'iso-8859-15 (il ne me semble pas y avoir d'erreur non plus)
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >

	<head>
		<title>Inscription</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
		<link rel="stylesheet" type="text/css" media="all" href="style/general.css" />
		<link rel="stylesheet" type="text/css" media="all" href="style/inscription.css" />
		<script src="external_pages.js" type="text/javascript"></script>
	</head>
	<body onload="javascript:externalLinks();">

Je n'ai pas encore mis en place ton script php de sélection de navigateur, voulant résoudre avant toute erreur de codage de ma page.. Et c'est bien aussi une des raisons de ma demande !

La page marche très bien pour la validation si je ne mets pas les balises <thead> et <tbody>. En les mettant, j'ai l'erreur suivante :
Error Line 97 column 12: end tag for "tbody" which is not finished.

</tbody>

Most likely, You nested tags and closed them in the wrong order. For example <p><em>...</p> is not acceptable, as <em> must be closed before <p>. Acceptable nesting is: <p><em>...</em></p>

Another possibility is that you used an element which requires a child element that you did not include. Hence the parent element is "not finished", not complete. For instance, <head> generally requires a <title>, lists (ul, ol, dl) require list items (li, or dt, dd), and so on.
 

batchy

Grand Maître
demande lui de t'afficher le parse tree

et examine aussi les entêtes de la réponse du serveur HTTP.
 

marsien

Grand Maître
Bon, je crois que j'ai compris d'où vient l'erreur, mais je ne comprends pas pourquoi il y a cet erreur !

Sur tes conseils, Batchy, j'ai affiché le parse tree et voilà ce que ça me donne pour le tableau
Code:
        <table>
            Axmlns CDATA [url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]
          <thead>
              Axmlns CDATA [url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]
            <tr>
                Axmlns CDATA [url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]
                Aclass TOKEN numero
                Arowspan CDATA 1
                Acolspan CDATA 1
              <th>
		 numéro
              </th>
                Axmlns CDATA [url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]
                Aclass TOKEN smiley
                Arowspan CDATA 1
                Acolspan CDATA 1
              <th>
		 smiley
              </th>
                Axmlns CDATA [url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]
                Aclass TOKEN nom
                Arowspan CDATA 1
                Acolspan CDATA 1
              <th>
		 nom
              </th>
                Axmlns CDATA [url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]
                Aclass TOKEN ajout
                Arowspan CDATA 1
                Acolspan CDATA 1
              <th>
		 ajouté le
              </th>
            </tr>
          </thead>
            Axmlns CDATA [url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]
          <tbody>
          </tbody>
        </table>
En gros, le "tbody" est vide, alors qu'il réclame obligatoirement au moins un "tr".

Le problème, c'est que ce tableau n'est pas vide, mais contenant (pour l'instant 3 "tr"
Code:
				<table>
					<thead>
						<tr>
							<th class="numero">numéro</th>
							<th class="smiley">smiley</th>
							<th class="nom">nom</th>
							<th class="ajout">ajouté le</th>
						</tr>
					</thead>
					<tbody>


						<tr>
							<td><a href="" title="">1</a></td>
							<td> <img src="" title="" alt="" /> </td>

							<td><input type="text" value="" class="" onmouseover="select()" /></td>
							<td>12/06/06, 18:00</td>
						</tr>


						<tr>
							<td><a href="" title="">2</a></td>
							<td> <img src="" title="" alt="" /> </td>

							<td><input type="text" value="" class="" onmouseover="select()" /></td>
							<td>12/06/06, 21:56</td>
						</tr>


						<tr>
							<td><a href="" title=">3</a></td>
							<td> <img src="" title="" alt="" /> </td>

							<td><input type="text" value="" class="" onmouseover="select()" /></td>
							<td>13/06/06, 06:26</td>
						</tr>


					</tbody>
				</table>

J'ai volontairement enlevé les valeurs des href, title, etc...

Comment c'est possible que le validateur ne voient pas le contenu du <tbody>alors qu'il est bien là !

[:edit] : ça peut venir du fait que la génération du contenu du <tbody> soit sous la dépendance d'un cookie ? En gros, si ce cookie n'existe pas, le contenu n'est pas créé... Je crois que je vais modifier mon script pour créer un <tr> fictif en cas d'absence de cookie...
 

marsien

Grand Maître
Ben voilà, c'était bien lié au problème du cookie ; j'y avais pas pensé auparavant, pourtant c'est évident !

Code php modifié en conséquence et validation OK :)
 

Johan_et_Pirlouit

Grand Maître
Effectivement, le truc bête qui nous échappe assez facilement ;)..

:merci:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 054
Membres
1 586 393
Dernier membre
mathhh28
Partager cette page
Haut