Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 12:37 Der er 36 kommentarer og
2 løsninger

Hvis IE bruges gør dette, ellers…

Lige først skal vi have nogle regler…
Vi diskutere ikke om det er rigtigt at bruge xhtml eller hvilken mime type man bør sende.
Til sagen…
Jeg søger et php script som kan sende en besked hvis det er IE der bruges, og hvis det er en anden browser så skal den sende en fælles besked.
Jeg vil tro at det ser sådan ud der mangler bare lidt koder.
hvis browseren er IE {
Header("Content-type: text/html");
include("mappe/filnavn.php");
}
Ellers {
Header("Content-type: application/xhtml+xml");
}
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 12:38 #1
Som i nok kan se har jeg ingen forstand på PHP :D
Avatar billede majbom Novice
03. januar 2009 - 13:01 #2
$_SERVER['HTTP_USER_AGENT']
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 13:32 #3
Mit kendskab til php er sådan at jeg kun lige har læst de første 3 sider her: http://www.phpartikler.dk/

Så $_SERVER['HTTP_USER_AGENT'] hjælper ikke så meget. Men jeg vil da prøve at søge på det.
Avatar billede micc Nybegynder
03. januar 2009 - 14:50 #4
Følgende bruger jeg pt i en applikation og det virker umiddelbart efter hensigten i IE, FF, Opera og Safari:

$content_type = "application/xhtml+xml";
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE"))
{
    $content_type = "text/html";
}
header("Content-Type: $content_type; charset=utf-8");

(applikationen er dog stadig i testfasen, så jeg er endnu ikke kommet frem til om det er den bedste løsning)
Avatar billede jensgram Nybegynder
03. januar 2009 - 17:27 #5
Alternativt kunne man kigge på hvad klienten kunne tænke sig at få serveret:

$content_type = 'text/html';
if (isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml') !== false) {
    $content_type = 'application/xhtml+xml';
}
header('Content-Type: ' . $content_type . '; charset=utf-8');
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 18:28 #6
hmmm, det var da sjovt :?
Her er starten af html dokumentet...
<?php
//Dette sker altid
        Header("content-language: da");
        header("Content-Type: iso-8859-1");

//Dette sker kun når det er en IE browser
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    {
        Header("Content-type: text/html");
    }

//Dette sker når det ikke er en IE Browser
else
    {
        Header("Content-type: application/xhtml+xml");
        echo '<?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>
<head>
  <title>...


Jeg får denne meddelse i FF
Denne XML-fil har ingen stilinformation tilknyttet. Dokumenttræet vises herunder.

Og så virker det i IE

Hvad skal det betyde :?
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 18:34 #7
Nå ja...
Jeg manglede at skrive
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da" lang="da">
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 19:00 #8
Så fik jeg det til at virke.
@Jensqram
Jeg ved ikke hvorfor men jeg kunne bare ikke få det til at virke med den kode som du har.

@micc
Du må meget gerne ligge et svar.

-----------------
Min endelige kode ser sådan ud...

<?php
//Dette sker altid
    Header("content-language: da");

//Dette sker kun når det er en IE browser
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE"))
  {
    Header("Content-type: text/html charset=iso-8859-1" );
  }

//Dette sker når det ikke er en IE Browser
else
  {
    Header("Content-type: application/xhtml+xml charset=iso-8859-1" );
    echo '<?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" xml:lang="da" lang="da">
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 19:29 #9
nææ der manglede en ;
<?php
//Dette sker altid
    Header("content-language: da");

//Dette sker kun når det er en IE browser
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE"))
  {
    Header("Content-type: text/html; charset=iso-8859-1" );
  }

//Dette sker når det ikke er en IE Browser
else
  {
    Header("Content-type: application/xhtml+xml; charset=iso-8859-1" );
    echo '<?xml version="1.0" encoding="iso-8859-1"?>';
  }
?>

:D
Avatar billede olebole Juniormester
03. januar 2009 - 20:22 #10
<ole>

Der er vist en del om XHTML, du skal have lært  ;o)

Det giver ikke mening at serve XHTML 1.0 Transitional med andet end 'text/html' - eller at bruge en XML-deklaration. XHTML 1.0 Transitional er HTML - ikke XML - og vil altid blive parsed som HTML i alle browsere. Det _skal_ den i følge standarden.

Derimod giver det ikke mening at serve andre XHTML-dokumenter som 'text/html'.

Husker du forøvrigt at skrive dine JavaScripts til XML-DOM? Ellers kan det være rystende ligegyldig, hvilken MIME, du server dokumenterne med.

HTML 4.01 er stadig den (s)eneste standard, som er understøttet på WWW, så dén kan du ligeså godt bruge. Der er ingen fremtidssikring i dagens XHTML-standarder, da du alligevel skal skrive koden helt om, når XHTML 2.0 udkommer og bliver understøttet.

Til den tid lærer du at skrive XHTML-markup på et kvarter - så lidt adskiller det sig fra HTML. Brug i stedet tiden på at lære, hvad XHTML er - og ikke mindst, hvordan du scripter mod XML-DOM'en. Det er formodentlig dér den helt store udfordring ligger  ;o)

De er gamle, men der er ikke sket væsentligt nyt på området, siden jeg skrev dem:
    http://www.eksperten.dk/artikler/537
    http://www.eksperten.dk/artikler/538

PS: ANSI (f.eks: iso-8859-1) har været deprecated i JS i årevis, så du skal nok overveje at bruge utf-8, hvis du vil udveksle data med resten af verden - og evt. gøre brug af Ajax (som er en umulighed med ANSI)

/mvh
</bole>
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 23:06 #11
Tak, jeg har faktisk læst de 2 artikler meget igennem, og da jeg også er forholdsvis nybegynder tager jeg det for ende af. Hvad må du gætte dig til :D
Jeg har nu også planer om at ændre koden til XHTML 1.1 men der er lige nogle ting jeg skal vide inden da.

Med hensyn til XML-DOM så går jeg ud fra at du mener dette.
<script type="text/javascript">
//<![CDATA[
//kode
//]]>
</script>
Som jeg skriver :D

Men jeg er på din side omkring XHTML, jeg skriver bare XHTML nu.

PS: Jeg kan se at FF reagere meget mere på en fejl hvis jeg sender Content-type: application/xhtml+xml;

Men det er ca. 2 uger siden jeg begyndte på PHP
Og 4 måneder siden jeg begynde på XHTML
Så ja der er meget jeg skal have lært :D
Avatar billede andreas13_fam Nybegynder
03. januar 2009 - 23:09 #12
Hvorfor er det enlig at jeg skal skrive mine koder _helt_ om når XHTML kommer ?
Avatar billede olebole Juniormester
03. januar 2009 - 23:22 #13
Der får vi bl.a. helt nye XMLEvents - og ikke mindst bliver vores nuværende forms udskiftet med XForms. Egentlig var det også meningen, at img, b og i skulle udgå, men det venter man af hensyn til bagudkompatibilitet desværre med til en senere version.

Nej, det var ikke CDATA-escaping, jeg mente. Du kan f.eks. ikke bruge:
    var o = document.getElementById("mitDiv");
    o.id = "noget";

Du kan ikke læse/sætte properties direkte. De skal sættes med setAttribute og læses med getAttribute. Der er heller ikke noget, der hedder:
    ELEMENT.onclick = function(){alert("Hep")};

Du skal i stedet bruge addEventListener, som IE godtnok endnu ikke forstår. Den vil have attachEvent.

Det er dét, jeg mener med at bruge XML-DOM i stedet for den gamle (og ofte proprietære) HTML-DOM  =)
Avatar billede jensgram Nybegynder
03. januar 2009 - 23:23 #14
Hvis du sender Content-Type: application/xhtml+xml (bemærk stort T) så vil Firefox brokke sig gevaldigt, hvis du ikke serverer valid XML. Det hedder "draconian error handling" og idéen er, at hvis man ikke som minimum serverer valid XML (i.e. korrekt formateret etc.) så bør fortolkeren ikke engang _forsøge_ at parse det. Det vil nemlig blot være gætteri!
Avatar billede olebole Juniormester
03. januar 2009 - 23:23 #15
document.write og innerHTML er også no-go's under XHTML (hvilket innerHTML nu også er under HTML)
Avatar billede jensgram Nybegynder
03. januar 2009 - 23:26 #16
Hvis du kan få


<?php
//Dette sker altid
    Header("content-language: da");

//Dette sker kun når det er en IE browser
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE"))
  {
    Header("Content-type: text/html; charset=iso-8859-1" );
  }

//Dette sker når det ikke er en IE Browser
else
  {
    Header("Content-type: application/xhtml+xml; charset=iso-8859-1" );
    echo '<?xml version="1.0" encoding="iso-8859-1"?>';
  }
?>


til at virke, så bør du også kunne få følgende i spil:



<?php

header('Content-Language: da');

$content_type = 'text/html; charset=utf-8';
$xml_prolog  = '';

if (isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml') !== false) {
    $content_type = 'application/xhtml+xml; charset=utf-8';
    $xml_prolog  = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
}

header('Content-Type: ' . $content_type);

print $xml_prolog;

?> --- Her kommer så din doctype etc.
Avatar billede olebole Juniormester
03. januar 2009 - 23:27 #17
Og udover jensgrams helt korrekte iagttagelse, brokker den sig også over visse script-/DOM-fejl.

At det så er komplet sort, at Mozilla har forsøgt at implementere innerHTML i FF's XHTML-DOM lag, er en helt anden ting! Firefox' DOM-lag sutter desværre generelt r*v ... big-time!
Avatar billede olebole Juniormester
03. januar 2009 - 23:32 #18
Jens >> Husk lige, at også Opera og Konqueror (og muligvis flere) skriver 'MSIE' i USER_AGENT feltet i HTTP-headeren i deres default opsætning.

Man skal yderligere diskriminere på strengen 'opera' og 'konqueror' - og så er det godt, at gøre alt upper- eller lowercase. Det øger sikkerheden for, at man gør, hvad man vil  ;o)
Avatar billede olebole Juniormester
03. januar 2009 - 23:33 #19
- så din sidste version er langt bedre  ;o)
Avatar billede jensgram Nybegynder
03. januar 2009 - 23:41 #20
olebole > Ja, upper/lower er altid værd at huske :) I sidstnævnte er det dog kun MIME-typen, og vil den ikke altid være lowercase? (Jeg spørger blot fordi jeg ikke aner om man kan stole på det.)

Hvis ikke:

- if (isset($_SERVER['HTTP_ACCEPT']) && strpos($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml') !== false) {
+ if (isset($_SERVER['HTTP_ACCEPT']) && strpos(strtolower($_SERVER['HTTP_ACCEPT']), 'application/xhtml+xml') !== false) {
Avatar billede jensgram Nybegynder
03. januar 2009 - 23:49 #21
... og ligegyldigt hvad vil strtolower() ikke gøre skade. Det kan vel betragtes som livrem og seler :)

Sengetid!
Avatar billede olebole Juniormester
03. januar 2009 - 23:51 #22
Nu var det oppe ved USER_AGENT, jeg tænkte på. Så er det ligegyldigt, hvordan browsernavnene staves  ;o)
Avatar billede olebole Juniormester
03. januar 2009 - 23:53 #23
- jaja, det tager altså ikke højde for, hvis nogen skulle finde på at 'sdavø' det 'Åpera' ... men 'Opera' eller 'opera' er ligemeget  ;D
Avatar billede erikjacobsen Ekspert
03. januar 2009 - 23:54 #24
"Vi diskutere ikke om det er rigtigt at bruge xhtml eller hvilken mime type man bør sende." - ok, men det gør vi så alligevel.
"Og 4 måneder siden jeg begynde på XHTML" - så er du vel stadig modtagelig overfor visdom fra de lærde ;)

Sådan meget kort sagt: Hvorfor XMTHL, når du ser hvilke problemer det giver? Et det for at få lidt "street-credit" overfor vennerne, så er det ok med mig. Men er det fordi du har et budskab du vil have ud - altså et website med indhold - så vil jeg mene, og næppe stå alene - at et fornuftigere valg ville være HTML 4.01, og gerne STRICT, hvis du skal have dine street-credits. Du skal alligevel lave det hele om når XHTML engang, måske, kan bruges til noget.
Avatar billede olebole Juniormester
04. januar 2009 - 00:03 #25
- og da jeg hermed erfarer, at begrebet street creed er nået helt ud til de yderste sfærer af kolonimagtens besiddelser, må det afgjort betragtes som et argument, der bør vægtes behørigt!  :)

Erik, det må vist blive årets første kryds i kalenderen  ;D
Avatar billede micc Nybegynder
04. januar 2009 - 00:38 #26
Hermed det svar som andreas13_fam udbad (udbedte?) sig. :) Du må dog meget gerne dele pointene med de andre kloge hoveder der har kommet med guldkorn.

Med hensyn til xhtml, så er jeg enig i at det ikke kan betale sig at gå op i hvis der er tale om en almindelig offentlig webside der skal virke for alle brugere - for alt det besvær du gør dig er den eneste belønning at den bliver vist 10ms hurtigere i de browsere der får served det som application/xhtml+xml (og som forstår det naturligvis).

Hvis man derimod ikke har brug for at understøtte IE overhovedet (hvilket er tilfældet for et af mine nuværende projekter), så kan der være gode fordele at hente ved at bruge xhtml1.1, fx kan SVG grafik inkorporeres direkte i dokumentet uden at skulle gøre brug af forskellige (ofte ikke-valide) browserspecifikke dokumenter.
Fremtiden hvor også IE har ordentlig understøttelse for XHTML og dets muligheder er dog desværre meget fjern, så til almindelige hjemmesider går den ikke. :(
Avatar billede micc Nybegynder
04. januar 2009 - 00:39 #27
Det blev til en kommentar...? Denne gang skulle det gerne være et svar. :)
Avatar billede jensgram Nybegynder
04. januar 2009 - 09:02 #28
@23:51:45 - Ja, det er jeg klar over at du mente :) -- Men det er da altid god skik at upper/lower inden sammenligning - uagtet om det er USER_AGENT eller ACCEPT.
Avatar billede andreas13_fam Nybegynder
04. januar 2009 - 16:29 #29
@23:26:59 - Det vil jeg da prøve.

@23:54:29 - I må meget gerne diskutere det. Grunden til at jeg skræv det var fordi at jeg vidste (Som i kan se) at der ville blive diskuteret, og så ville mit spørgsmål blive sat til siden.

@street-credit - Nej jeg har ikke behov for street-credit (men det skader ikke :D), men man har vel lov til at øve sig på XHTML, og jeg går ud fra at XHTML x.x - STRICT  er tætter på XHTML 2.0 end HTML 4.01 - STRICT.
Hvis jeg skulle lave en hjemmeside som skulle bruges til noget seriøst. ville jeg lave den i HTML 4.01 - STRICT. Men det skal men "øve-side" ikke rigtig.

@00:38:25 så skal jeg bruge flere svar :D
Avatar billede erikjacobsen Ekspert
04. januar 2009 - 16:47 #30
"jeg går ud fra at XHTML x.x - STRICT  er tætter på XHTML 2.0 end HTML 4.01 - STRICT" - det tror jeg ikke. XHTML 2.0 vil være markant anderledes end hvad vi kender til.
Avatar billede olebole Juniormester
04. januar 2009 - 20:20 #31
- og mellem XHTML 1.0 og HTML 4.01 er forskellene næsten ikke eksisterende, hvad markupkoden angår. Hvad script og DOM angår kan du ligeså godt øve dig i HTML 4.01, hvor du sagtens kan bruge den syntaks, der skal til under XHTML.

Sålænge, der er tale om lære/lege sider, kan jeg dog godt forstå, du gerne vil teste og rode med XHTML  ;o)
Avatar billede andreas13_fam Nybegynder
04. januar 2009 - 22:15 #32
Jeg syntes nu stadig at det er en omvending at skrive <br /> og ikke <br>, og det er forskel nok for mig, til at jeg bil bruge det på mine lære/lege side.
Og så er der også en hvis tilfredsstillelse i at se at ens koder er helt rigtigt skrævet, om det så HTML 4.01 STRICT eller XHTML 1.0+ .

Men som sagt...
Hvis jeg skulle lave en hjemmeside som skulle bruges til noget seriøst. ville jeg lave den i HTML 4.01 - STRICT. Men det skal min "øve-side" ikke rigtig.

Så nu begynder det vist at blive endeløst skriverri.

-->jensgram ligger du et svar, så jeg kan dele pointne mellem micc og dig. Som micc forslog.
Avatar billede olebole Juniormester
05. januar 2009 - 00:29 #33
Ja, jeg erkender, at der nok er tale om endeløst skriveri, men glæd dig over, der er nogen, der gider forsøge at lære dig, hvad der er rigtigt og forkert  ;o)

XHTML 1.0 Transitional skal ifølge standarden altid tolkes som HTML. Her opstår imidlertid en selvmodsigelse!

HTML bygger på - og skal overholde - SGML (Standard Generalized Markup Language). Ifølge SGML skal <br/> faktisk tolkes som <br>> - altså et br-element efterfulgt af en '>'. I head-elementet kan de imidlertid slet ikke bruges (her må jo ikke findes renderbare elementer), hvilket i virkeligheden gør meta- og link-elementer til det rene HTML-sovs.

Fænomenet kaldes 'NET-enabling start-tag' og er et ret komplekst emne i forhold til SGML og de forskellige HTML- og XHTML-varianter. For sjov kan du jo prøve at validere dette dokument:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>

<div/noget/

</body>
</html>

- hvilket går glidende, omend det sker med en advarsel om, at browserne ikke viser, hvad de egentlig burde, og man derfor opfordres til at undgå syntaksen. Koden i body-elementet burde nemlig tolkes som:
    <div>noget</div>

Det er med andre ord noget vrøvl at bruge XML-lukninger af 'tomme' tags i markup-kode, der skal tolkes som HTML. Det gælder vel at mærke ikke kun XHTML 1.0 Trans, men også XHTML 1.0 Strict, hvis den serves som 'text/html'. XHTML 1.1 må slet ikke virke som 'text/html'.

Jeg finder det ikke spor tilfredsstillende, hvis min kode kun fungerer på grund af browserbugs. Jeg kan rigtig godt lide, at der er begrundelse for de ting, jeg gør og den kode, jeg skriver ... men ved udmærket, at andre kan finde problemerne/overvejelserne akademiske  ;o)
Avatar billede olebole Juniormester
05. januar 2009 - 00:32 #34
"hvilket i virkeligheden gør XML-lukkede meta- og link-elementer til det rene HTML-sovs."
Avatar billede olebole Juniormester
05. januar 2009 - 00:39 #35
Nu skal jeg nok lade være med at spamme dig mere - men husk, at vi bare prøver at gøre dig klogere på, hvad der er op og ned i det omfang, vi formår det. For som du ser, er det ret komplekst (og du har masser til gode endnu, men det bliver alt for langt til en E-tråd)  ;o)
Avatar billede jensgram Nybegynder
05. januar 2009 - 08:36 #36
! :p
Avatar billede andreas13_fam Nybegynder
05. januar 2009 - 17:52 #37
Olebole jeg læser skam også med stor interesse. Jeg tror nu efterhånden at jeg har fået lidt styr på det.
HTML 4.01 er pt standarten på WWW
XHTML 1.0 skal serveres med text/html
XHTML 1.1 skal serveres med application/xhtml+xml, men bliver serveret med text/html
XHTML 2.0 bliver den næste standart og bliver altid serveret med application/xhtml+xml
IE forstår endnu ikke application/xhtml+xml
Der er stor forskel på på XHTML 1.1 og 2.0
Olebole og mange andre skal have respekt for den viden de har og deler, det er DET som giver street creed :D
Avatar billede olebole Juniormester
05. januar 2009 - 20:28 #38
XHTML 1.0 Trans _skal_ serves som 'text/html'
XHTML 1.0 Strict _må_ serves som 'text/html'

- ellers har du helt ret. Tak for rosen  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester