XHTML 1.1 (encore et toujours)

Je sens que je vais faire des heureux, notamment Laurent Denis ou Éric Daspet :)

Ce blog est en effet toujours en XHTML 1.1 pour les navigateurs supportant le Xhtml. Il est donc correctement envoyé en application/xhtml+xml à ces navigateurs.

Mais la nouveautés aujourd'hui est que les navigateurs ne supportant pas ce type MIME recevront du... HTML 4.01, tout bien formé, tout comme il faut :)

D'après une forte inspiration d'une page de Keystone Websites, j'ai codé quelques fonctions bien pratiques me permettant de détecter les capacités du navigateur, et de modifier mon contenu en conséquence.

function ShouldSendXhtml()
{
	// Si le navigateur gère le type MIME XHTML
	if( stristr($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml') )
	{
		// Si le navigateur a spécifié une priorité pour le XHTML
		if( preg_match('/application\/xhtml\+xml;q=0(\.[1-9]+)/i', $_SERVER['HTTP_ACCEPT'], $aResults) )
		{
			$nXhtmlQ = (int)($aResults[1]);

			// Si le navigateur a spécifié une priorité pour le HTML
			if( preg_match('/text\/html;q=0(\.[1-9]+)/i', $_SERVER['HTTP_ACCEPT'], $aResults) )
			{
				$nHtmlQ	= (int)($aResults[1]);

				// Si le navigateur demande en priorité	du HTML, on lui servira
				if($nHtmlQ > $nXhtmlQ)
				{
					return false;
				}
			}
		}
		return true;
	}
	return false;
}

function TransformToHtml($strBuffer)
{
	return preg_replace('!\s*/>!', '>', $strBuffer);
}

function WriteXhtmlHeader()
{
	$strCharset = 'utf-8';

	if( ShouldSendXhtml() ) 
	{
		header('Content-type: application/xhtml+xml; charset=' . $strCharset);
		echo '<?xml version="1.0" encoding="'.$strCharset.'"?>' . "\n";
?>

<!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">
<?
	}
	else 
	{
		header('Content-type: text/html; charset=' . $strCharset);
		// Démarre la bufferisation de contenu, et appelle la fonction TransformToHtml 
		// lorsque celui-ci est terminé et prêt à être envoyé au navigateur
		ob_start("TransformToHtml"); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="fr">
<?
	}
}

PS: Alors Denis ?

Haut de page