Page 1 sur 1

Servir le bon type mime pour xhtml

Posté : 24 juin 2005, 02:37
par naholyr
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 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 :lol: 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".
<?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 fatale

Exemple, la page ci-dessus donnerait ceci :
Image
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 :
Image

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