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


Warning: include(..inc/_add-main.inc.php): failed to open stream: No such file or directory in /home/maujor/public_html/tutorial/mathiascript.php on line 24

Warning: include(..inc/_add-main.inc.php): failed to open stream: No such file or directory in /home/maujor/public_html/tutorial/mathiascript.php on line 24

Warning: include(): Failed opening '..inc/_add-main.inc.php' for inclusion (include_path='.:/opt/cpanel/ea-php72/root/usr/share/pear') in /home/maujor/public_html/tutorial/mathiascript.php on line 24

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®

Ir para a página de entrada nos sites dos livros.

topo