Servir un site en application/xhtml+xml, XHTML5 et IE

Servir un site en application/xhtml+xml, XHTML5 et IE (le 4 septembre 2011)

Ombre se lance, son site va être servi en application/xhtml+xml, bon courage !

Si cette ligne semble anodine, je puis vous assurer qu'elle a de fortes répercussions sur la façon dont va être codé votre site, car si servir son site en classique text/html ne pose que peu de contraintes, le servir en application/xhtml+xml met des contraintes extrêmement fortes :

  • Votre code doit être bien formé (syntaxiquement parlant), sinon les navigateurs modernes comme Firefox afficheront une erreur de parsing XML… et n'iront pas plus loin !
  • Si votre site utilise les balises HTML5, je vous invite à (re)lire Pour migrer mon site vers XHTML5, j'ai détaillé tous les problèmes éventuels.
  • Plus gênant, IE dit le mal nommé ne supporte pas les sites servis ainsi (jusqu'à la version 9 qui le supporte enfin), il existe bien une astuce pour le faire fonctionner, mais c'est très imparfait.

Il y a plus simple : il est possible via PHP de détecter si l'agent utilisateur accepte les sites servis en application/xhtml+xml, voici la méthode :

<?php
$mystring = $_SERVER['HTTP_ACCEPT'];
$findme = 'application/xhtml+xml';
$pos = strpos($mystring, $findme);
if ($pos === false) {
$prologue='';
header('Content-type: text/html; charset=UTF-8');
} else {
$prologue='<?xml version="1.0" encoding="utf-8"?>'."\n";
header('Content-Type: application/xhtml+xml;charset=UTF-8');
}
?>

Le principe est simple, si l'agent utilisateur supporte ce mode de rendu, alors j'envoie les bons entêtes (headers), et j'affiche le prologue XML… qui une bonne fois pour toutes, ne sert que si on sert son site en application/xhtml+xml !!! (pitié, arrêtez de le mettre, je le vois encore sur des sites que je reprends au travail, ça ne sert à rien pour 99% des sites)
Dans le cas contraire, je sers le site en classique text/html.

Si vous voulez voir la différence, éditez la source de cette page sur Firefox, et ensuite sur IE8 par exemple. Vous verrez que la ligne du prologue disparait avec IE8.

Si vous utilisez HTML5, les métas ne changent pas, <meta charset="utf-8" /> marchant dans les deux cas. Avec HTML5, la détection se fait directement via les entêtes, et non plus via les méta-tags.

Dans le cas contraire, par exemple un bon vieux XHTML 1.0, on peut reprendre la même logique pour afficher le bon méta-tag :

<?php
$mystring = $_SERVER["HTTP_ACCEPT"];
$findme = "application/xhtml+xml";
$pos = strpos($mystring, $findme);
if ($pos === false) {
echo ' <meta http-equiv="content-Type" content="text/html; charset=UTF-8" />'."\n";
} else {
echo ' <meta http-equiv="content-Type" content="application/xhtml+xml;" />'."\n";
}
?>

Ainsi, vous ne pénaliserez pas trop les utilisateurs d'IE8 et inférieurs. Si j'osais un trait de cynisme totalement assumé… ils le sont déjà bien assez avec ces vieux navigateurs.

Permalien :

Flux RSS des commentaires de ce billet : https://www.nicolas-hoffmann.net/rss/commentaires.php?id_news=1419


Aucun commentaire pour le moment.

Ajouter un commentaire









L'option « Se souvenir de mes informations » utilise un cookie, elle ne sera pas effective si vous les avez désactivés.

Les balises HTML ne seront pas interprétées, il est donc inutile d'en mettre. Par contre, les sauts de lignes de votre commentaire seront pris en compte, ne mettez donc pas de <br />, le site s'en chargera. Bien sûr, un commentaire vide ne sera pas ajouté !

L'auteur (autrement dit moi) n'est pas responsable des éventuelles fautes d'orthographe dans les commentaires.
Tout propos raciste et/ou insultant sera supprimé sans préavis. Les commentaires hors de propos destinés à faire de la pub pour des sites seront également supprimés sans ménagement.

Je vous prie de me pardonner, j'ai énormément de mal à lire le "langage" SMS, il n'est donc pas du tout interdit de s'abstenir de l'utiliser. Qui plus est, vous avez sûrement un clavier digne de ce nom et pas celui d'un téléphone portable. Ne vous gênez pas pour utiliser l'option "Prévisualiser" si vous voulez vous relire avant de poster, je vous en remercie d'avance !

Cet article a été écrit par Nicolas Hoffmann.

Ce site est la propriété de Nicolas Hoffmann.
Tous droits réservés, les textes du blog sont publiés sous licence CC BY-NC-SA.