Gå til innhold

tips: Få IE til å tolke application/xml


Anbefalte innlegg


<?php
header('Content-ype: application/xml'); //nesten alle browsere untatt IE tolker dette


echo <<<xml

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="copy.xsl"?>
xml;


?>

<!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">
<head>
<!-- RESTEN AV DOKUMENT-->

 

 

 

 

copy.xsl :

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
   <template match="/">
       <copy-of select="."/>
   </template>
</stylesheet>

Nå vil IE tolke sida som application/xml søl om den tror sida er i text/html

Endret av dabear
Lenke til kommentar
Videoannonse
Annonse

Dette gjelder ikke akkurat topic, men:

 

XHTML skal egentlig ikke sendes med MIME-type text/html, men application/xhtml+xml.

 

IE's manglende støtte for XML har gjort at folk bare har brukt text/html i stedet for application/xhtml+xml,

noe som har resultert i at W3C har tillatt at XHTML 1.0 Transitional og Strict kan, men det betyr ikke at det bør, sendes som text/html.

Tingen er at XHTML blir ikke engang parset korrekt dersom text/html brukes som MIME-type, det blir behandlet som "tag-soup".

Det at mange skryter av å ha siden sin validert XHTML 1.1, og bruker text/html, er rett og slett bare dumt, og feil, siden de fleste browsere bare ser tag-soup.

 

Hvis du i ettertid kommer frem til at du vil sende siden med MIME-type application/xhtml+xml, vil du, mest sansynlig, få mange feil i XML-parsinga.

Ett eksempel er at <!-- og --> inne i <script> og <style> skal byttes ut med <!--//--><![CDATA[//><!-- og //--><!]]>

Hvis dette ikke gjøres, vil alt som står i mellom <!-- og --> bli behandlet som det egentlig skal, nettopp som en kommentar.

Output av:

<style type="text/css">
<!--
body {
margin: 0;
}
-->
</style>

blir

<style type="text/css">

</style>

 

 

EDIT

Siden IE ikke har støtte for MIME-typen application/xhtml+xml, må man "detecte" hvilken user-agent brukeren har.

bloggen min bruker jeg dette PHP-scriptet:

<?php
if ( stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) {
 header("Content-type: application/xhtml+xml");
}
else {
 header("Content-type: text/html");
}
?>

Dette må du legge inn før all annen input, altså helst over DOCTYPE-deklarasjonen.

En annen ting som er viktig å huske på, er at IE ofte ikke finner DOCTYPE, hvis du har mellomrom før den deklareres. (Denne PHP-koden gir ingen output i koden, da den blir kjørt før siden har nådd browseren.)

Content-type bør, hvis det er mulig, sendes via en HTTP-header, i stedet for via HTML-elementet meta

Endret av SirIce
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å
×
×
  • Opprett ny...