Banner propaganda da DevMedia - Cursos de desenvolvimento web

Negociação de conteúdo via PHP para servir documentos XHTML como aplicação XML

Publicado em: 07/07/2005

Autor: Mathias Bynens
URL do original: https://mathibus.com/archive/2005/04/php-xhtml-content-negotiation
Título original: XHTML content negotiation through PHP
Adaptado com autorização expressa do autor

Introdução

Mathias publicou no seu site um excelente artigo mostrando um meio de servir um documento XHTML como XML via PHP.

Usei o script de Mathias no meu site acresentando alguns outros comandos simples de PHP para escrever o código conforme o documento seja servido.
Para constatar o resultado do script ao servir o documento e escrever o código, visualize o código fonte desta página do meu site em um navegador com suporte para XML (Firefox por exemplo) e em outro sem suporte (Internet Explorer :-( por exemplo) e compare os códigos fonte desde o início do documento até a seção HEAD .

O template do site

A título de ilustração considere um template como o abaixo mostrado:

<?php include('/includes/doctype.inc'); ?>
<head>
<title>Page Title</title>
<?php include('/includes/metastyle.inc'); ?>
</head>
<body id="index">
................

Os scripts

doctype.inc
Início do script de Mathias
<?php
$mime = 'text/html';
if(strstr($_SERVER['HTTP_USER_AGENT'], 
'W3C_Validator') || 
strstr($_SERVER['HTTP_USER_AGENT'], 
'WDG_SiteValidator') ||
strstr($_SERVER['HTTP_USER_AGENT'], 
'W3C-checklink') ||
strstr($_SERVER['HTTP_USER_AGENT'], 
'Web-Sniffer') ||
strstr($_SERVER['HTTP_USER_AGENT'], 
'FeedValidator') ||
strstr($_SERVER['HTTP_USER_AGENT'], 
'Poodle predictor') ||
strstr($_SERVER['HTTP_USER_AGENT'], 
'Leknor.com gzip tester')) {
$mime = 'application/xhtml+xml';
} else {
if(stristr($_SERVER['HTTP_ACCEPT'], 
'application/xhtml+xml')) {
if(preg_match("/application\/xhtml\+xml;
q=([01]|0\.\d{1,3}|1\.0)
/i", $_SERVER['HTTP_ACCEPT'], $matches)) 
{$xhtml_q = $matches[1];
if(preg_match("/text\/html;
q=q=([01]|0\.\d{1,3}|1\.0)/i", 
$_SERVER['HTTP_ACCEPT'], $matches)) 
{$html_q = $matches[1];
if((float)$xhtml_q >= (float)$html_q) {
$mime = 'application/xhtml+xml';
}
}
} else {
$mime = 'application/xhtml+xml'; 
}
}
}
header('Content-Type: ' . $mime . ';charset=utf-8'); 
header('Vary: Accept');
//Fim do script de Mathias

// Escrevendo o prólogo XML 
//e os links para as folhas de estilos quando 
//o documento for servido como uma aplicação  XML 
if ('application/xhtml+xml' == $mime) 
		{ 
echo '<?xml version="1.0" encoding="utf-8"?>'."\n";
echo '<?xml-stylesheet type="text/css" 
href="/estilos/main.css" 
media="screen"?>'."\n"; 
echo '<?xml-stylesheet type="text/css" 
href="/estilos/print.css"
media="print"?>'."\n";
echo '<?xml-stylesheet type="text/css" 
href="/estilos/handheld.css" 
media="handheld"?>'."\n";
		}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "
https://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="https://www.w3.org/1999/xhtml" 
xml:lang="pt-br">
metastyle.inc
<meta name="keywords" content=" " />
<meta name="description" content=" " />
<meta name="author" content="Mauricio Samy Silva" />
<meta.......
// Escrevendo meta tag's. 
//Escrevendo os links para as folhas de estilos quando 
//o documento for servido como text/html 
<?php
if ( 'application/xhtml+xml' == $mime) 
		{
echo '<meta http-equiv="Content-Type" 
content="application/xhtml+xml;
charset=utf-8" />'."\n";
		}else{
echo '<meta http-equiv="Content-Type" 
content="text/html; charset=utf-8" />'."\n";
echo '<style type="text/css" media="screen">'."\n";
echo "@import url("/estilos/main.css");'."\n";
echo '</style>'."\n";
echo '<link rel="stylesheet" type="text/css" 
media="print" href="/estilos/print.css" />'."\n";
echo '<link rel="stylesheet" type="text/css" 
media="handheld" href="/estilos/handheld.css" />'."\n";
		}
?>

Thanks Mathias for your kindness comments and suggestions on my extra code.

Conheça os livros do Maujor®

Clique a "capinha" para visitar o site do livro

capa livro jQuery capa livro ajaxjQuery capa livro css capa livro html capa livro javascript capa livro html5 capa livro css3 capa livro jQuery Mobile capa livro jQuery UI capa livro SVG capa livro RWD capa livro foundation capa livro HTML5 e CSS3 capa livro Bootstrap3 capa livro Sass e Compass

topo