"application/xhtml+xml", "html" => "text/html", ); $q = array(); if(headers_sent()) { $chosenFormat = "html"; } else if(isset($_GET['forceFormat'])) { $chosenFormat = $_GET['forceFormat']; } else { foreach($mimes as $format => $mime) { $regExp = '/' . str_replace(array('+','/'),array('\+','\/'), $mime) . '(;q=(\d+\.\d+))?/i'; if (preg_match($regExp, $_SERVER['HTTP_ACCEPT'], $matches)) { $preference = isset($matches[2]) ? $matches[2] : 1; if(!isset($q[$preference])) $q[$preference] = $format; } } if($q) { // Get the preferred format krsort($q); $chosenFormat = reset($q); } else { $chosenFormat = "html"; } } $negotiator = new ContentNegotiator(); $negotiator->$chosenFormat( $response ); } function xhtml(HTTPResponse $response) { $content = $response->getBody(); // Only serve "pure" XHTML if the XML header is present if(substr($content,0,5) == '<' . '?xml' ) { $response->addHeader("Content-type", "application/xhtml+xml; charset=" . self::$encoding); $response->addHeader("Vary" , "Accept"); $content = str_replace(' ',' ', $content); $content = str_replace('
','
', $content); $content = eregi_replace('(]*[^/>])>','\\1/>', $content); $response->setBody($content); } else { return $this->html($response); } } function html(HTTPResponse $response) { $response->addHeader("Content-type", "text/html; charset=" . self::$encoding); $response->addHeader("Vary", "Accept"); $content = $response->getBody(); $content = ereg_replace("<\\?xml[^>]+\\?>\n?",'',$content); $content = str_replace(array('/>','xml:lang','application/xhtml+xml'),array('>','lang','text/html'), $content); $content = ereg_replace(']+>', '', $content); $content = ereg_replace('setBody($content); } protected static $disabled; static function disable() { self::$disabled = true; } } ?>