Gå til innhold

Får PHP-error på "<?xml" | Content-type-fix


Gjest Slettet+6132

Anbefalte innlegg

Gjest Slettet+6132

Heisann.

 

Satt og leste på XHTML 1.0 og fant ut at det var en liten deklarasjon jeg "manglet" (den er ikke påkrevd for at siden skal validiere)

 

Det som jeg prøver å sette inn er:

<?xml version="1.0" encoding="iso-8859-1"?>

Men når jeg refresher så får jeg opp en koselig error:

Parse error: parse error, unexpected T_STRING in /sesnurert/index.php on line 1

 

Er det noen måte å få PHP til å ikke reagere på "<?"?

 

EDIT: Et spørsmål til. Hvorfor får jeg "Type: text/html" selv om jeg har "application/xhtml+xml" som type?

EDIT 2: PHP v4.3.8 / Apache v1.3.31

Endret av Slettet+6132
Lenke til kommentar
Videoannonse
Annonse

Sett inn denne PHP-koden istedenfor kun selve XML-deklarasjonen:

<?php echo '<?xml version="1.0" encoding="iso-8859-1"?>'; ?>

 

Hvorfor får jeg "Type: text/html" selv om jeg har "application/xhtml+xml" som type?
Vanskelig å si uten å se scriptet som bestemmer hvilken type som skal sendes.
Lenke til kommentar
Gjest Slettet+6132

Takk, den første funka. Hvorfor tenkte jeg ikke på det selv? :p

 

Her er det som blir sendt ut til browseren:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>
<title>eRik Web</title>
<link rel="stylesheet" href="style.css" type="text/css" />
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
<meta name="description" content="eRiks homepage" />
<meta name="keywords" content="eRik, ex0n, data, computer, linux, homepage, server, PC" />
<meta name="copyright" content="All your base are belongs to ME! :)" />
</head>

 

Du kan jo se selv

Lenke til kommentar
Gjest Slettet+6132
Hmm.. La faktisk merke til det samme på min egen side nå. Se vedlegg.

 

Kanskje serveren sender med en default header? *eksperimentere*

phpinfo() gir meg "default_mimetype text/html" hvertfall.

Endret av Slettet+6132
Lenke til kommentar

Aha, nå fant jeg en løsning. Lemp inn følgende øverst:

$accept = $_SERVER['HTTP_ACCEPT'];
if(stristr($accept,'application/xhtml+xml')) {
header('Content-type: application/xhtml+xml');
}

Da fikk jeg i hvert fall riktig content-type over alt :)

Lenke til kommentar
Gjest Slettet+6132
Aha, nå fant jeg en løsning. Lemp inn følgende øverst:

$accept = $_SERVER['HTTP_ACCEPT'];
if(stristr($accept,'application/xhtml+xml')) {
header('Content-type: application/xhtml+xml');
}

Da fikk jeg i hvert fall riktig content-type over alt :)

Såpass ja :D

 

Takk skal du ha, burde nesten visst det selv egentlig ;)

Lenke til kommentar

Jeg pleier som regel å gjøre det slik:

<?php
       $charset = 'iso-8859-1';
       $mime    = (strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml') !== false) ? 'application/xhtml+xml' : 'text/html';
       header('Content-Type:' . $mime . ';charset=' . $charset);

       if($mime == 'application/xhtml+xml'){echo '<?xml version="1.0" encoding="' . $charset . '"?>';}
     
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  xml:lang="no" lang="no">
<head>

Lenke til kommentar

Og jeg foretrekker dette scriptet, som er bombesikkert.

<?php

$charset = "iso-8859-1";
$mime = "text/html";
$declaration = '<?xml version="1.0" encoding="' . strtoupper($charset) . '"?>'."\r\n";

$fetch = apache_request_headers();

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

if(eregi('MSIE[ \/]([0-9\.]+)', $fetch['User-Agent']))
{
if(!stristr($fetch['User-Agent'], 'Opera'))
{
 $declaration = "";
}
}

if(stristr($fetch['Accept'], "application/xhtml+xml"))
{
if(preg_match("/application\/xhtml\+xml;q=0(\.[1-9]+)/i", $fetch['Accept'], $matches))
{
 $xhtml_q = $matches[1];
 if(preg_match("/text\/html;q=0(\.[1-9]+)/i", $fetch['Accept'], $matches))
 {
 	$html_q = $matches[1];
 	if($xhtml_q >= $html_q)
 	{
   $mime = "application/xhtml+xml";
 	}
 }
}
else
{
 $mime = "application/xhtml+xml";
}
}

if($mime == "application/xhtml+xml")
{
ob_start("fix_code");
}

header("Content-Type: $mime; charset=$charset");
header("Vary: Accept");

echo $declaration;


?>

Lenke til kommentar

...og jeg gikk tilbake til HTML 4.01 fordi jeg ble drittlei av CNT (Content Neogation Techniques), som den Lokaltog postet over, eller det jeg brukte på misinterpreted.org før.

 

Grunnen til at du ikke fikk sendt korrekt MIME-type tidligere, er at MIME-typen på et XML/XHTML-dokument må sendes før all annen output. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...