5568 sujets

Sémantique web et HTML

Bonjour,

Je suis débutant en XHTML/CSS et je suis en train de faire mon tout premier site.

Je rencontre actuellement un problème de validation en XHTML 1.0 strict à cause du morceau de code que phpmyvisit (permet d'avoir toute une serie de statistique sur les visiteurs de son site) demande d'insérer sur chacunes de ses pages.

Ce bout de code n'est clairement pas compatible en XHTML 1.0 strict. J'ai pleins d'erreurs au niveau de la validation.

J'ai déjà essayé pleins de trucs pour y remédier mais comme je suis débutant je n'ai pas envie d'alterer ce morceau de code et de le rendre inefficace.

Quelqu'un pourrait m'aider?

Merci d'avance pour toutes vos réponses

Voici mes types erreurs, peut-être vous parleront-ils plus qu'à moi Smiley cligne :

1) document type does not allow element "a" here; missing one of "p", "h1", "h2", ....

2)an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified.

3)document type does not allow element "noscript" here; missing one of "object", "ins", "del", "map", "button" start-tag.



<!-- phpmyvisites -->
<a href="http://www.phpmyvisites.net/" title="phpMyVisites | Open source web analytics" onclick="window.open(this.href);return(false);">
<script type="text/javascript">
<!--
var a_vars = Array();
var pagename='';
var phpmyvisitesSite = 1;
var phpmyvisitesURL = "http://www.MonSite.com/phpmv2/phpmyvisites.php";
//-->
</script>
<script language=javascriptsrc="http://www.MonSite.com/phpmv2/phpmyvisites.js" type="text/javascript"></script>
<noscript>
<p>phpMyVisites | Open source web analytics
<img src="http://www.MonSite.com/phpmv2/phpmyvisites.php" alt="phpMyVisites" style="border:0" />
</p>
</noscript>
</a>
<!-- /phpmyvisites -->



Smiley biggrin Smiley biggrin Smiley biggrin Smiley biggrin Smiley biggrin
Salut,

Ayant galéré sur le même problème que toi et ne me souvenant plus des tenants et aboutissants du résultat, je me vois dans l'obligation de faire une chose atroce : te donner la solution toute cuite Smiley cligne

<!-- phpmyvisites -->
<a href="http://www.phpmyvisites.net/" onclick="window.open(this.href);return(false);">
<script type="text/javascript">
<!--
var a_vars = Array();
var pagename='';
var phpmyvisitesSite = 1;
var phpmyvisitesURL = "http://www.phpmyvisites.net/phpmv2/phpmyvisites.php";
//-->
</script>
<script src="http://www.phpmyvisites.net/phpmv2/phpmyvisites.js" type="text/javascript"></script>
<object>
<noscript>
<p id="stats_img"><img src="http://www.phpmyvisites.net/phpmv2/phpmyvisites.php" alt="phpMyVisites" /></p>
</noscript>
</object>
</a>
<!-- /phpmyvisites --> 


NB : Je t'ai mis le code correpsondant à mon cas, copier-coller : il se peut qu'il y ait quelques nuances avec le tien.
Marvin Le Rouge a écrit :
Salut,

Ayant galéré sur le même problème que toi et ne me souvenant plus des tenants et aboutissants du résultat, je me vois dans l'obligation de faire une chose atroce : te donner la solution toute cuite Smiley cligne

[...]


NB : Je t'ai mis le code correpsondant à mon cas, copier-coller : il se peut qu'il y ait quelques nuances avec le tien.

Attention, je pense que ce code est toujours invalide (même s'il se valide Smiley lol ). En effet, tu as donc rajouté un object autour du noscript... Sauf que tout ça se trouve dans un lien, donc on se retrouve toujours avec un p dans un a, ce qui n'est pas valide Smiley decu

En fait là, on assiste à ce que j'appellerais un "bordel généralisé Smiley lol qui demanderait une grosse modif pour que ce soit valide... Il faudrait mettre le lien, avec dedans le contenu de noscript (en supprimant les balises <p></p> pas très utiles), et regarder comment fonctionne les différents .js afin qu'ils insèrent au bon endroit le contenu. Je parie qu'ils font ça à coup de document.write, qu'il faudrait donc modifier Smiley confus
Merci les gars, bon, je n'ai pas tout compris mais je continue à plancher dessus... le but du jeu étant de valider et d'avoir un morceau de code correct.


D'ailleurs je trouve ça bizarre que phpmyvisit nous ponde un morceau de code du type "usine à gaz"! Peut-être vont ils corriger le tir prochainement Smiley cligne

@+

Smiley cligne Smiley cligne Smiley cligne Smiley cligne Smiley cligne Smiley cligne Smiley cligne
FlorentG a écrit :

Attention, je pense que ce code est toujours invalide (même s'il se valide Smiley lol ). En effet, tu as donc rajouté un object autour du noscript... Sauf que tout ça se trouve dans un lien, donc on se retrouve toujours avec un p dans un a, ce qui n'est pas valide Smiley decu

En fait là, on assiste à ce que j'appellerais un "bordel généralisé Smiley lol qui demanderait une grosse modif pour que ce soit valide... Il faudrait mettre le lien, avec dedans le contenu de noscript (en supprimant les balises <p></p> pas très utiles), et regarder comment fonctionne les différents .js afin qu'ils insèrent au bon endroit le contenu. Je parie qu'ils font ça à coup de document.write, qu'il faudrait donc modifier Smiley confus


Je sais que c'est complètement tordu. Et effectivement, ça ne devrait pas - je pense - valider. Mais il y a je crois un truc tordu comme quoi il ne veut pas img dans noscript parce qu'il faut une balise bloc (ce qui oblige à avoir une balise bloc dans une balise inline Smiley decu ).
Marvin Le Rouge a écrit :


Je sais que c'est complètement tordu. Et effectivement, ça ne devrait pas - je pense - valider. Mais il y a je crois un truc tordu comme quoi il ne veut pas img dans noscript parce qu'il faut une balise bloc (ce qui oblige à avoir une balise bloc dans une balise inline Smiley decu ).

Oui, <noscript> n'est pas vraiment un conteneur à proprement parler. C'est plutôt une balise de "fallback".

Si on doit mettre un conteneur en plus dans un <noscript> (genre div, p, etc.), je pense que c'est pour des raisons de validation.

Alors prenons l'exemple suivant :
<body>
  <img src="pouet.png" alt="poue" />
</body>

Ca ne valide pas, car <body> ne peux pas contenir des balises inline (img, a, span...). Il faut un conteneur comme div, p, etc :
<body>
  <div>
    <img src="pouet.png" alt="pouet" />
  </div>
</body>

Maintenant reprenons notre noscript :
<body>
  <div>
    <script src="pouet.js" type="text/javascript"></script>
    <noscript>
      <img src="pouet.png" alt="pouet" />
    <noscript>
  </div>
</body>

Alors on sait que noscript n'est pas un conteneur. MAIS, tout est en un div, on pourrait dire alors "ah mais mon img est dans un noscript, lui-même dans un div. Donc mon img est virtuellement dans un div, je ne vois pas où est le problème".

Le problème vient du fait que c'est impossible à exprimer avec une DTD. Pour ceux qui n'ont jamais mis le nez dans une DTD ou qui ne savent pas ce que c'est, c'est en fait un fichier texte avec une syntaxe particulière qui permet de définir les élément utilisable (html, body, div, p, etc.), leur attributs (genre div accepte un attribut id, script lui accept les attributs type et src), et quels éléments vont dans lesquels. C'est là qu'est écrit qu'un img doit être dans un conteneur de type div, p, object, etc.

Alors le problème est que la technologie des DTD date un peu, et qu'on ne peut pas indiquer des règle de validations complexes. On ne peut donc pas dire "si un img est dans un noscript, et que ce noscript est dans un div, alors c'est bon"... On ne peut que dire "un img doit être dans un div"...

Donc s'il faut un div dans un noscript, c'est pour des raisons historiques et technologiques...