Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: IE lataa xhtml tiedostot

Akseli F [18.04.2006 16:42:09]

#

Eli olen nyt saanut sivujeni ulkoasun jonkimoiseen kuntoon, mutta nyt kun katson sivua IE:llä se alkaa lataamaan sitä.
Content-typen lähetän seuraavalla koodilla:

<?php
header('Content-Type: application/xhtml+xml; charset=UTF-8');
?>

Jos taas poistan sivun, tai laitan tuon lähettämään normaalin html-sivun headerit homma toimii.

Eli miten tuon voisi korjata. Pitäisikö tunnistaa selain ja jos se on IE lähettää eri headeri?

Merri [18.04.2006 16:46:28]

#

Jep, IE täytyy sniffiä ja lähettää sille text/html. Se ei tajua mitään application/xhtml+xml:n päälle (eikä edes omien tapojensa vastaisesti yritä edes automaattisesti tunnistaa tiedostomuotoa, mitä turhankin usein tekee).

Juice [18.04.2006 19:23:10]

#

Joskus muinoin kopsailin jostakin seuraavanlaisen pätkän tähän tarkoitukseen ja kyllähän tämä on näyttänyt toimivan.

<?php
$mime = "text/html";
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");
?>

EDIT: UTF-8 :)

Akseli F [19.04.2006 13:40:04]

#

Joo, kiitti avusta. Pitänee tuota koodia testata kunhan pääsen omalle koneelle. Näyttäisi kuitenkin ensisilmäykseltä ihan toimivalta.

Clawhammer [19.04.2006 14:11:42]

#

Ite olen käyttänyt tälläistä, varmaan kummatkin ajaa saman asian. Alla oleva pätkä kannattaa siis tallettaa omana tiedostona(mime.php) ja sitte lisää sen näin:

<?php include('mime.php'); ?>

<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
</head>

<?php
$charset = "iso-8859-1";
$mime = "text/html";

function fix_code($buffer) {
   return (str_replace(" />", ">", $buffer));
}

if(stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")) {
   # if there's a Q value for "application/xhtml+xml" then also
   # retrieve the Q value for "text/html"
   if(preg_match("/application\/xhtml\+xml;q=0(\.[1-9]+)/i",
                 $_SERVER["HTTP_ACCEPT"], $matches)) {
      $xhtml_q = $matches[1];
      if(preg_match("/text\/html;q=0(\.[1-9]+)/i",
                    $_SERVER["HTTP_ACCEPT"], $matches)) {
         $html_q = $matches[1];
         # if the Q value for XHTML is greater than or equal to that
         # for HTML then use the "application/xhtml+xml" mimetype
         if($xhtml_q >= $html_q) {
            $mime = "application/xhtml+xml";
         }
      }
   # if there was no Q value, then just use the
   # "application/xhtml+xml" mimetype
   } else {
      $mime = "application/xhtml+xml";
   }
}

# special check for the W3C_Validator
if (stristr($_SERVER["HTTP_USER_AGENT"],"W3C_Validator")) {
   $mime = "application/xhtml+xml";
}

# set the prolog_type according to the mime type which was determined
if($mime == "application/xhtml+xml") {
   $prolog_type = "<?xml version='1.0' encoding='$charset' ?>
      <!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='en'>";
} else {
   ob_start("fix_code");
   $prolog_type = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'
      'http://www.w3.org/TR/html4/strict.dtd'>
      <html lang='en'>";
}

# finally, output the mime type and prolog type
header("Content-Type: $mime;charset=$charset");
header("Vary: Accept");
print $prolog_type;
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta