Skrevet lør. d. 03. januar 2009 kl. 12:38:34| #1
Som i nok kan se har jeg ingen forstand på PHP :D
Skrevet lør. d. 03. januar 2009 kl. 13:01:47| #2
$_SERVER['HTTP_USER_AGENT']
Skrevet lør. d. 03. januar 2009 kl. 13:32:03| #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.
Skrevet lør. d. 03. januar 2009 kl. 14:50:43| #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)
Skrevet lør. d. 03. januar 2009 kl. 17:27:15| #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');
Skrevet lør. d. 03. januar 2009 kl. 18:28:16| #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/ (...)<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 :?
Skrevet lør. d. 03. januar 2009 kl. 18:34:22| #7
Nå ja...
Jeg manglede at skrive
<html xmlns="
http://www.w3.org/ (...) xml:lang="da" lang="da">
Skrevet lør. d. 03. januar 2009 kl. 19:00:22| #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/ (...)<html xmlns="
http://www.w3.org/ (...) xml:lang="da" lang="da">
Skrevet lør. d. 03. januar 2009 kl. 19:29:12| #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
Skrevet lør. d. 03. januar 2009 kl. 20:22:54| #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/ (...) http://www.eksperten.dk/ (...)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>
Skrevet lør. d. 03. januar 2009 kl. 23:06:53| #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
Skrevet lør. d. 03. januar 2009 kl. 23:09:50| #12
Hvorfor er det enlig at jeg skal skrive mine koder _helt_ om når XHTML kommer ?
Skrevet lør. d. 03. januar 2009 kl. 23:22:25| #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 =)
Skrevet lør. d. 03. januar 2009 kl. 23:23:04| #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!
Skrevet lør. d. 03. januar 2009 kl. 23:23:21| #15
document.write og innerHTML er også no-go's under XHTML (hvilket innerHTML nu også er under HTML)
Skrevet lør. d. 03. januar 2009 kl. 23:26:59| #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.
Skrevet lør. d. 03. januar 2009 kl. 23:27:46| #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!
Skrevet lør. d. 03. januar 2009 kl. 23:32:21| #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)
Skrevet lør. d. 03. januar 2009 kl. 23:33:48| #19
- så din sidste version er langt bedre ;o)
Skrevet lør. d. 03. januar 2009 kl. 23:41:25| #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) {
Skrevet lør. d. 03. januar 2009 kl. 23:49:08| #21
... og ligegyldigt hvad vil strtolower() ikke gøre skade. Det kan vel betragtes som livrem og seler :)
Sengetid!
Skrevet lør. d. 03. januar 2009 kl. 23:51:45| #22
Nu var det oppe ved USER_AGENT, jeg tænkte på. Så er det ligegyldigt, hvordan browsernavnene staves ;o)
Skrevet lør. d. 03. januar 2009 kl. 23:53:50| #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
Skrevet lør. d. 03. januar 2009 kl. 23:54:29| #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.
Skrevet søn. d. 04. januar 2009 kl. 00:03:56| #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
Skrevet søn. d. 04. januar 2009 kl. 00:38:25| #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. :(
Skrevet søn. d. 04. januar 2009 kl. 00:39:14| #27
Det blev til en kommentar...? Denne gang skulle det gerne være et svar. :)
Skrevet søn. d. 04. januar 2009 kl. 09:02:27| #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.
Skrevet søn. d. 04. januar 2009 kl. 16:29:14| #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
Skrevet søn. d. 04. januar 2009 kl. 16:47:19| #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.
Skrevet søn. d. 04. januar 2009 kl. 20:20:31| #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)
Skrevet søn. d. 04. januar 2009 kl. 22:15:19| #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.
Skrevet man. d. 05. januar 2009 kl. 00:29:22| #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/ (...)<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)
Skrevet man. d. 05. januar 2009 kl. 00:32:00| #34
"hvilket i virkeligheden gør XML-lukkede meta- og link-elementer til det rene HTML-sovs."
Skrevet man. d. 05. januar 2009 kl. 00:39:00| #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)
Skrevet man. d. 05. januar 2009 kl. 08:36:42| #36
Skrevet man. d. 05. januar 2009 kl. 17:52:16| #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
Skrevet man. d. 05. januar 2009 kl. 20:28:42| #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)