Aller au contenu

xhtml1.0 strict : déclaration xml ou pas ?


jaco24

Sujets conseillés

Si on veut être compatible avec le plus de versions de browsers possible doit -on écrire :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  lang="fr"  xml:lang="fr">

ou:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  lang="fr"  xml:lang="fr">

ou encore :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

autrement dit risque-t-il d'y avoir plus ou moins de problème selon que l'on ajoute la déclaration xml ou pas ?

Merci pour toute réponse

Lien vers le commentaire
Partager sur d’autres sites

salut

je ne sais pas te répondre, mais voilà ce que je mets, et ça a l'air de marcher partout :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">

et dans le head

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

j'ai vu dans d'autres forums que certains webmasters ont des problèmes si la déclaration

<?xml version="1.0" encoding="iso-8859-1"?>

est placée avant le DOCTYPE

mais c'est peut-être obligatoire en xhtml 1.1 :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Le prologue XML n'est pas obligatoire selon les usages que l'on fait du XHTML.

Si on utilise XHTML pour faire du HTML (comme 90% des gens), le prologue n'est pas nécessaire.

Par contre, si XHTML est utilisé comme du XML ou du MathML, le prologue est obligatoire.

De même, il est obligatoire si l'encodage du document est autre que UTF-8 ou UTF-16.

A l'heure actuelle, le prologue XML ne fait que basculer certains navigateurs dans le modèle de boite (erroné) de Microsoft.

Lien vers le commentaire
Partager sur d’autres sites

Malgré le fait que j'utilise moi-même ceci :

<?xml version='1.0' encoding='iso-8859-1'?>
<!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>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1"  />
<title>Title de la page en question</title>

Je m'assure de passer le prologue XML seulement aux navigateurs capable de le supporter convenablement comme ceci (code php gracieusement offert par deux copains, tel que mentionné ici) :

http://www.cybercodeur.net/weblog/commenta...p?idmessage=614

<?php
// Indique un Mime type correct si le client accepte le vrai xhtml
if( stristr($HTTP_SERVER_VARS["HTTP_ACCEPT"], "application/xhtml+xml") )
{
 header("Content-type: application/xhtml+xml");
 echo "<?xml version='1.0' encoding='iso-8859-1'?>\n";
}
else
{
 header("Content-type: text/html; charset=iso-8859-1");
}
?>

Le code sert essentiellement à vérifier si l'agent utilisateur est en mesure de recevoir du application/xhtml+xml. En cas contraire, il ne présente pas le prologue xml et lui file du text/html (ce qui rejoint le propos de Sibelius).

Si tu ne peux pas pour une raison ou une autre utiliser quelque chose comme ça pour départager les adultes des enfants (à savoir, les navigateurs plus performants des navigateurs moins performants comme la série des MSIE, incluant la v6.0), alors je te suggère de t'en tenir à ceci si tu veux faire du xhtml 1.1 (tout bêtement ne pas mettre le prologue) :

<!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>
<meta http-equiv="Content-Type" content="text/HTML; charset=iso-8859-1"  />
<title>Title de la page en question</title>

Ou de modifier en conséquence si tu souhaites servir du xhtml strcit ou transitionnel, ce qui signifie tout simplement changer ton doctype et ajouter un lang="fr" (seulement au transitionnel).

J'espère que ça peut aider un peu ! :D

Lien vers le commentaire
Partager sur d’autres sites

  • 4 months later...

Bonjour,

Très intéressante comme astuce,je suis d'ailleur en train de l'essayer,mais j'ai une question.

Si je fait ceci :

<?php
// Indique un Mime type correct si le client accepte le vrai xhtml
if( stristr($HTTP_SERVER_VARS["HTTP_ACCEPT"], "application/xhtml+xml") )
{
header("Content-type: application/xhtml+xml");
echo "<?xml version='1.0' encoding='UTF-8'?>\n";
}
else
{
header("Content-type: text/html; charset=UTF-8");
}
?>
<html>
<head>
<title>Titre de ma page</title>
<style type="text/css">
_AT_import url(style.css);
</style>
</head>
<body>
......

Sous IE si je regard la source j'ai bien ça :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Mais sous Firefox rien,la source commence a <html>.

Est ce normale ?

Merci d'avance pour vos réponse.

Modifié par Yonji
Lien vers le commentaire
Partager sur d’autres sites

Si tu obtiens ces résultats, ce n'est pas vraiment normal en effet ;)

En utilisant tel quel le code que tu cites, j'obtiens au contraire:

- un prologue xml et le type mime application/xhtml+xml dans Firefox et Opera

- pas de prologue et le type mime text/html dans IE

Heureusement, d'ailleurs, puisque ces résultats correspondent aux capacités respectives de ces navigateurs ;)

Au passage, le code ci-dessus devrait être complété pour ajouter en particulier :

- la DTD XHTML1.0 dans tous les cas

- l'élément <html xmlns=&quot;http://www.w3.org/1999/xhtml" xml:lang="fr"> en application/xhtml+xml et un simple <html lang="fr"> en text/html

- la CSS par défaut avec <?xml-stylesheet type="text/css" href="..." ?> en application/xhtml+xml et un simple <link rel="..."> en text/html

Modifié par LaurentDenis
Lien vers le commentaire
Partager sur d’autres sites

Bon c'est bon maintenant j'obtient le prologue XML sous Firefox & Opéra (plus sous IE).

+1 avec la dernière remarque de Laurent si vous pouviez rajouter les changement pour le css ... (je ne maitraisie pas php d'ou cette demande :) )

Merci d'avance.

Modifié par Yonji
Lien vers le commentaire
Partager sur d’autres sites

Pour ma part, je dois avouer que pour ce qui est de passer ma CSS en xml-stylesheet, Laurent m'avait mis au défi de le faire et je n'y suis jamais parvenu... :wacko:

Lien vers le commentaire
Partager sur d’autres sites

ça n'était pas un défi, Denis, juste une suggestion ;)

Cela dit, tout en vous prévenant que j'écris comme un cochon en PHP et que ce script est à améliorer, voici ce que j'utilise :

<?php  
$accept_xml =
  !empty($_SERVER['HTTP_ACCEPT']) &&
  strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml') !== false;
 
if ($accept_xml) {
 header('Content-Type: application/xhtml+xml; charset=ISO-8859-1');
echo '<?xml version="1.0" encoding="ISO-8859-1"?>'."\n";
echo '<?xml-stylesheet type="text/css" href="style.css" ?>'."\n";
}
else {
header('Content-Type: text/html; charset=ISO-8859-1');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<?php if ($accept_xml) { ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
 <link rel="schema.DC" href="http://purl.org/DC/elements/1.0/" />
  <meta name="DC.Format" content="application/xhtml+xml; charset=ISO-8859-1" />
<?php }
else { ?>
<html lang="fr">
<head>
 <link rel="schema.DC" href="http://purl.org/DC/elements/1.0/" />
 <meta name="DC.Format" content="text/html; charset=ISO-8859-1" />
 <style type="text/css" media="screen" title="defaut">@import url(style.css);</style>
<?php } ?>
 <title>...</title>
 </head>
etc...

La fonction récupérant le type-mime souhaité par le navigateur est un peu différente (empruntée à DotClear), mais le principe est identique. Le schéma Dublin Core est plus une coquetterie qu'autre-chose et devrait être remplacé/complété par une <meta http-equiv="Content-Type" content="..." /> plus classique.

Modifié par LaurentDenis
Lien vers le commentaire
Partager sur d’autres sites

Un problème soulevé par cette (ces en fait, php ou configuration du serveur) techniques est que les navigateurs de type KHTML (Konqueror ou Safari pour ne pas les nommer) n'indiquent pas accepter le type MIME application/xhtml+xml dans leur HTTP_ACCEPT :whistling:

Du coup on leur sert du text/html alors que bien entendu ils supportent très bien le xhtml :wacko:

Ce n'est pas très grave mais ça mérite tout de même d'être mentionné ;)

Lien vers le commentaire
Partager sur d’autres sites

Dans la mesure où de toute façon, ces navigateurs reçoivent une version HTML complète du contenu, partaitement exploitable bien qu'en deça de leurs capacités, ça n'a en effet aucune importance. L'erreur serait en fait de recourir à un script basé sur l'identification du navigateur plutôt que sur ses capacités déclarées...

Heu... En fait, adresser du XHTML1.0 en application/xhtml+xml ou en text/html n'a actuellement aucune importance pour le visiteur quelque-soit le navigateur. C'est juste une satisfaction pour l'auteur ;)

Lien vers le commentaire
Partager sur d’autres sites

Bien dit Laurent. C'est vrai qu'encore une fois, on perd de vue l'objectif de cette grande chasse aux sorcières : faire tout propre,propre, propre... ^_^

Lien vers le commentaire
Partager sur d’autres sites

Super ton code Laurent !!! :D

Marche niquel j'ai filer le tuyeau a des potes qui sont eux aussi ravi. :P

Topic qui ma était tres instrutif pour ma part merci les gars et Monique pour le liens

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...