Tom Morris
By: a guest | Oct 23rd, 2007 | Syntax:
PHP | Size: 2.10 KB | Hits: 43 | Expires: Never
// tom morris - tommorris.org
// invoke with ob_start("callback"); ... ob_end_flush();
function callback($buffer) {
$output = SmartyPants($buffer);
// get the default mime type accepted by browser
$defaultmime = mimeTypeChecker($_SERVER);
// load into DOM and test
$domtest = new DOMDocument('1.0');
if (@$domtest->loadXML($smartypants) == TRUE) {
$mime = $defaultmime;
} else {
$mime = "text/html";
}
// return headers
header('Content-Type: ' . $mime . ';charset=utf-8');
return $output;
}
// uses mimeTypeChecker... thus included below. i didn't write
// this, cant remember where i took it from
function mimeTypeChecker($server) {
$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';
}
}
}
return $mime;
}