Servir le bon type mime pour xhtml
Posté : 24 juin 2005, 02:37
Beaucoup de débats, plus ou moins stériles, autour du sujet sur lequel je ne m'étendrai pas 
J'ai récupéré ici et là des codes et divers commentaires.
J'en ai sorti mon entête "passe-partout". L'idée c'est de servir aux navigateurs qui le supportent un content-type application/xhtml+xml (ce qui théoriquement offre certains avantages, je les cherche encore
mais j'imagine déjà que ça facilite l'analyse et accélère donc l'affichage), et un text/html à ceux qui ne le supportent pas (principalement IE).
En prime on colle la bonne balise meta, et on déclare la feuille de style "bien comme il faut".
Exemple, la page ci-dessus donnerait ceci :

Si j'avais - par mégarde - omis le tag de fermeture </p>, que se passerait-il avec un navigateur supportant le content-type application/xhtml+xml ? D'habitude si on oublie de fermer un tag, c'est certes une source complètement foireuse, mais le rendu reste le même. Ici c'est différent, on parle bien d'un document XML, et ici on obtiendrait donc un message d'erreur XML :

Ne faites pas ça pour faire joli, ne passez à un "vrai" xhtml que si vous êtes réellement prets à le faire...
J'ai récupéré ici et là des codes et divers commentaires.
J'en ai sorti mon entête "passe-partout". L'idée c'est de servir aux navigateurs qui le supportent un content-type application/xhtml+xml (ce qui théoriquement offre certains avantages, je les cherche encore
En prime on colle la bonne balise meta, et on déclare la feuille de style "bien comme il faut".
<?php
$accept_xml = isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml');
$charset = 'ISO-8859-1';
$contentType = $accept_xml ? 'application/xhtml+xml; charset='.$charset : 'text/html; charset='.$charset;
header('Content-type: '.$contentType);
if ($accept_xml) {
echo '<'.'?xml version="1.0" encoding="ISO-8859-1"?'.'>'."\n";
echo '<'.'?xml-stylesheet type="text/css" href="style.css" ?'.'>'."\n";
}
?>
<!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>
<?php else: ?>
<html lang="fr">
<head>
<link rel="stylesheet" href="style.css" type="text/css" />
<?php endif ?>
<title>Mon titre</title>
<meta http-equiv="Content-type" content="<?=$contentType?>" />
</head>
<body>
<h1>Ma page</h1>
<p>Mon texte</p>
</body>
</html>
Attention, si vous voulez travailler en xhtml "pour faire classe" ou "parce que dreamweaver a mis ça", et qu'en plus vous décidez de servir le bon content-type (xml), toute erreur sera fataleExemple, la page ci-dessus donnerait ceci :

Si j'avais - par mégarde - omis le tag de fermeture </p>, que se passerait-il avec un navigateur supportant le content-type application/xhtml+xml ? D'habitude si on oublie de fermer un tag, c'est certes une source complètement foireuse, mais le rendu reste le même. Ici c'est différent, on parle bien d'un document XML, et ici on obtiendrait donc un message d'erreur XML :

Ne faites pas ça pour faire joli, ne passez à un "vrai" xhtml que si vous êtes réellement prets à le faire...