webForumDet fria alternativet

Validering och HTML samt '&'

9 svar · 478 visningar · startad av aasah

aasahMedlem sedan mars 20034 471 inlägg
#1

Jag är ingen höjdare på HTML, kan i princip bara de mest grundläggande koder. Nyligen fick jag storhetsvansinne och tänkte testa det här med evaluering. Testaren (http://validator.w3.org/) gör inget annat än klagar och mestadels på saker jag inte har en susning om hur man åtgärdar. :( Jag måste inte få det att funka för sidan funkar ju... men, tja, ... lite hjälp skulle uppskattas! :)

  1. För att komma någon vart alls måste jag ange ett speciellt "char-set". Texten är på engelska men mitt namn innehåller ju ett typiskt svenskt tecken... Vilket char-set är det rätta? ISO 8859-4 (Nothern Europe) eller -vadå ? Och hur anger man det i filen, antar att man kan det?

  2. Vad är DOCTYPE? Varför behövs det? Var skriver man det och hur borde det se ut? Det är helt vanlig enkel HTML med (validerande) CSS vilket genereras med PHP. Inga design-under här inte - bara lättläst och enkel "design".

  3. Dessutom säger den att den utgår ifrån att sidan är "HTML 4.01 Transitional". Vad innebär det? Låter det rätt beträffande enkel HTML?

Vanligt förekommande klagomål skrev:

Line x, column y: required attribute "ALT" not specified

Gällande img-tag. Vad har man för nytta av alt? Den brukar, när man sneglar på en del "visa källor", vara "", dvs tomma strängen. :q Varför sätta dit den då? Vad händer om den får ett värde?

felmeddelande skrev:

cannot generate system identifier for general entity "PHPSESSID"
... HREF="takeQz.php?Qid=ht&PHPSESSID=011e6f628f0df10aed9362e9f9b18b
....

Enligt efterföljande text är detta troligtvis följden av '&':et i URLen ovan. De hänvisar till Ampersands in URLs, vilket jag har läst utan att begripa när man ska ha det och inte??? Någon som kan förklara? Skummare ändå är att i filen ser länken ut så här:

<A class="menu" HREF="takeQz.php?Qid=ht">

inget '&' så långt ögat når...??? :o VA?

  1. Kan man inte ha en paragraf som börjar före ett Javascript-block, men slutar efter det?

Jag begriper noll... :x

Red: La till 6) sedan jag fattat att det felet inte heller var så enkelt som ett kvarglömt </P>.

frankofMedlem sedan jan. 20016 874 inlägg
#2

Byt "&" mot "&amp;"
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Alt är en "tvungen" atr. till img. detta för synskadade eller andra med specialbehov, och är en alternativ visning av bilden, kan vara bra även för folk som ser, om bilden av ngn. anledning inte laddas.
DOCKTYPE behövs för att webläsaren skall veta hur den skall hantera dokumentet. t.ex:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
zcorpanMedlem sedan dec. 20042 245 inlägg
#3
  1. UTF-8 funkar till de flesta (alla?) språk.

  2. En DOCTYPE kan se ut såhär:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
    

    Den ska ligga högst upp i samtliga HTML-filer. Den behövs för att ställa webbläsare i "standardläge", samt för att kunna validera dokumentet. (Om du inte vill använda "standardläge" kan du använda "-//W3C//DTD HTML 4.01 Transitional//EN" istället.)

  3. Alt-attributet måste du ha för alla icke-text-element, som tex. bilder. Det ska vara ett alternativ till bilden, om bilden av någon anledning inte visas. Om bilden tex bara är dekorativ, så bör du använda alt="", för att berätta att alternativet till bilden är en tom sträng. (IE visar felaktigt ALT-texten i en tooltip, vilket du kan rätta till med title="".)

  4. Ersätt alla & med &amp;

  5. Har du lagt ett script-block inuti en P? P får endast innehålla inline-element, vilket förklarar saken. :)

:bire

zcorpanMedlem sedan dec. 20042 245 inlägg
#4

Just ja. Det bästa sättet att sätta en charset är med HTTP headern. För att göra det behöver du konfigurera servern, eller använda ett serverskript-skråk. Om det är en apache-server kan du använda .htaccess:

AddType text/html;charset=utf-8 htm html

eller

AddDefaultCharset utf-8

eller med PHP

<?php
header ('Content-Type: text/html;charset=utf-8');
?>

:)

jarvkloMedlem sedan juli 20013 378 inlägg
#5

Re: Validering och HTML samt '&'

Andas.... andas!!! :bire

Skämt åsido. här är mina klureringar om dina problem:

aasah skrev:

  1. För att komma någon vart alls måste jag ange ett speciellt "char-set". Texten är på engelska men mitt namn innehåller ju ett typiskt svenskt tecken... Vilket char-set är det rätta? ISO 8859-4 (Nothern Europe) eller -vadå ? Och hur anger man det i filen, antar att man kan det?

ISO-8859-1 är en vanligt förekommande (kallas ibland "ISO Latin 1"). Du bör göra följande:

  1. Se till att din redigerare är inställd för ISO-8859-1
  2. Se till att detta anges antingen i "http-headern" eller via en metatagg...
    Som zcorpan säger, är det enklaste att ha sin server rätt konfigurerad så att detta görs automatiskt i "http-headern" (dvs utanför din HTML-kod)...
    Är du det minsta osäker på om så är fallet, kan du även ställa in det med metataggen
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

nånstans mellan <head> och </head>

  1. Vad är DOCTYPE? Varför behövs det? Var skriver man det och hur borde det se ut? Det är helt vanlig enkel HTML med (validerande) CSS vilket genereras med PHP. Inga design-under här inte - bara lättläst och enkel "design".

När man definierade HTML4 (vi pratar om december 1997 nu - så "nytt" är det väl knappast) så sade man att alla HTML-dokument framöver *måste* ange vilken dokumenttyp sidan är kodad efter med hjälp av taggen <!DOCTYPE som skall ligga högst upp i koden (alltså före <html>). <!DOCTYPE talar om för webbläsaren vilken version av HTML du använder i ditt dokument, så att webbläsaren (om den behöver det) kan optimera sina interna funktioner efter det du anger...

I dagsläget reagerar olika webbläsare också lite olika på hur du skriver din <!DOCTYPE (som zcorpan var inne på)
Läs även mer i trådarna:
http://www.webforum.nu/showthread.php?s=&postid=1001195#post1001195
http://www.webforum.nu/showthread.php?s=&postid=650163#post650163

  1. Dessutom säger den att den utgår ifrån att sidan är "HTML 4.01 Transitional". Vad innebär det? Låter det rätt beträffande enkel HTML?

Japp.
HTML4 Transitional (och HTML4.01 Transitional) innehåller i pincip alla de taggar man hört talas om som "HTML"

Vanligt förekommande klagomål skrev:

Line x, column y: required attribute "ALT" not specified

Gällande img-tag. Vad har man för nytta av alt? Den brukar, när man sneglar på en del "visa källor", vara "", dvs tomma strängen. :q Varför sätta dit den då? Vad händer om den får ett värde?

Det där har debatterats en del. alt-attributet innehåller text som är avsedd att ersätta bilden om bilden inte kan laddas eller om webbläsaren är inställd för att inte visa några bilder. Anledningen till att alt är obligatorisk är att man vill garantera att synskadade alltid skall ha ett textalternativ (som kan läsas upp av en skärmavläsare) att ta till när det behövs.
Annan effekt:
MSIE visar (felaktigt enligt standard) per default en liten gul flärp med alt-texten över bilden när man för markören över den...

felmeddelande skrev:

cannot generate system identifier for general entity "PHPSESSID"
... HREF="takeQz.php?Qid=ht&PHPSESSID=011e6f628f0df10aed9362e9f9b18b
....

Enligt efterföljande text är detta troligtvis följden av '&':et i URLen ovan. De hänvisar till Ampersands in URLs, vilket jag har läst utan att begripa när man ska ha det och inte??? Någon som kan förklara? Skummare ändå är att i filen ser länken ut så här:

<A class="menu" HREF="takeQz.php?Qid=ht">

inget '&' så långt ögat når...??? :o VA?

PHP lägger på ett &PHPSESSID=..... automatiskt på alla länkar (samt som ett "hidden input" i alla formulär") om du inte stänger av detta i t.ex. php.ini när du har sessioner på sidan. Mer om detta i tråden: http://www.webforum.nu/showthread.php?s=&postid=754590#post754590

  1. Kan man inte ha en paragraf som börjar före ett Javascript-block, men slutar efter det?

Jo det skall gå i HTML4 Transitional, men tänk på att använda formen

<script>
[b]<!--[/b]
...
[b]// -->[/b]
</script>

om din kod innehåller några "<"-tecken så att validatorn inte får för sig att tolka ett villkor som början av en tagg ;)

Lycka till! :birp

zcorpanMedlem sedan dec. 20042 245 inlägg
#6

När man definierade HTML4 (vi pratar om december 1997 nu - så "nytt" är det väl knappast) så sade man att alla HTML-dokument framöver *måste* ange vilken dokumenttyp sidan är kodad efter med hjälp av taggen <!DOCTYPE som skall ligga högst upp i koden (alltså före <html> ).

Hehe... det gällde för HTML 2.0 också. ;)

tänk på att använda formen

<script>
<!--
...
// -->
</script>

om din kod innehåller några "<"-tecken så att validatorn inte får för sig att tolka ett villkor som början av en tagg

Det är inte därför man lägger till SGML-kommentarer... Idén var att "gömma" texten inom SCRIPT (och STYLE också för den delen) för de riktigt gamla webbläsare som inte förstod innebörden av dessa "nya" element, så att de inte skulle skriva ut skript på skärmen... Jag tycker man kan hoppa över SGML-kommentarerna, med tanke på att t.o.m. Netscape 4 förstår innebörden av STYLE och SCRIPT. :) Och validatorn klagar inte:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>test</title>
<script type="text/javascript">
var a, b;
if (a < b) return;
</script>
<p>test

Man kan förstås "escapa" med &lt; om man vill. :)

Använder man XHTML å andra sidan bör man lägga in en CDATA-sektion i skript-elementet för att XML-tolken inte ska tolka det som XML... :)

aasahMedlem sedan mars 20034 471 inlägg
#7

Tack för alla svar! :D Ska läsa på mera i trådarna som jarvklo länkar till.

aasahMedlem sedan mars 20034 471 inlägg
#8

Re: Re: Validering och HTML samt '&'

jarvklo skrev:

http://www.webforum.nu/showthread.php?s=&postid=650163#post650163

Ger en till största delen helt underbart pedagogisk genomgång! Tack! Men däremot ger dina två exempel samma resultat för mig??? :q Vad är skillnaden?

jarvklo skrev:

... Exempel:
Du väljer att köra HTML4.01 Transitional.
En Doctype för detta kan då se ut som följer:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

...

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">

Oavsett vilken du väljer, så kommer din kod (om den är korrekt) att validera, men olika webbläsare kommer att hantera din sida olika beroende på att den första och sista (eller helt utelämnad Doctype!) ställer in webbläsare i "Quirks"-mode och den i mitten ställer in webbläsaren i "Standards"-mode.

Det är här det blir klurigt eftersom skillnaderna mellan "Quirks" och "Standards" ofta märks visuellt...
Exempel:
Ta filen:

<html>
<head><title>Test</title></head>
<body>
<table style="height:100%; width:100%; border: 1px solid black">
<tr><td style="text-align:center;">Hej hopp!</td></tr>
</table>
</body>
</html>

(testa: http://member.webforum.nu/2241/doctype1.html )
Inga konstigheter...
Hej hopp mitt på sidan!
Men lägg nu till

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

överst....
(Testa: http://member.webforum.nu/2241/doctype2.html )
Och hoppsan Kerstin! - Nu blev det skillnad i höjdled !!!
(i Standards-mode måste du nämligen ställa in height:100% på body och html mha CSS för att det skall funka som man kanske tror ...)

  1. Angående ampersand-strulet. Hur stort är problemet egentligen? Är problemet bara det att sidan inte evaluerar, eller kan det även betyda att det blir konstigheter i visningen eller att inloggade får problem eller något? Kort sagt, ur ett funktionellt perspektiv vad innebär det?

Och sätter ini_set om länkningen för en viss sida eller för hela siten?

Bakgrunden till frågan är att följande lösning (från den länkade tråden):

jarvklo skrev:

Så en enkel lösning är nog följande:

Note: The arg_separator.output php.ini directive allows to customize the argument seperator. For full XHTML conformance, specify &amp; there.

Du behöver nog alltså antingen ändra i php.ini, eller köra en

ini_set("arg_separator.output","&amp;amp;");

nånstans tidigt så att du får till &amp; som argumentseparator istället för & som är default!

... och sedan gäller det ju också att du är noga med att själv använda &amp; överallt förståss ;)

ju förutsätter att jag plötsligt kan ändra detta utan att andra människors länkar tillbaks till mig inte plötsligt slutar fungera... På rak arm vet jag att alla valideringslänkar innehåller '&' tex. Hur löser man det? :o :q

jarvkloMedlem sedan juli 20013 378 inlägg
#9

Re: Re: Re: Validering och HTML samt '&'

aasah skrev:

Men däremot ger dina två exempel samma resultat för mig??? :q Vad är skillnaden?

Du kör MSIE5.5, "Doctype switching" - dvs fenomenet som ger skillnaden - finns bara i MSIE6 och uppåt (ja, förutom i resten av alla modernare webbläsare då) ;)

  1. Angående ampersand-strulet. [...] ur ett funktionellt perspektiv vad innebär det?

Ingenting i dagens webbläsare!

Och sätter ini_set om länkningen för en viss sida eller för hela siten?

ini_set funkar per sida (RTFM:- http://se2.php.net/manual/en/function.ini-set.php :e )

Bakgrunden till frågan är att följande lösning [...] ju förutsätter att jag plötsligt kan ändra detta utan att andra människors länkar tillbaks till mig inte plötsligt slutar fungera... På rak arm vet jag att alla valideringslänkar innehåller '&' tex. Hur löser man det? :o :q

Ehm - nu tänker du nog bakvänt!
Det som händer är att PHP kodar &-tecknen den lägger till i t.ex. dina egna (interna) länkars PHPSESSID-attribut som &amp; - Du kan aldrig påverka hur folk kodar de länkar som pekar *till* dig från andra håll och det påverkar inte hur du skriver dina &amp;-tecken i dina "manuellt" inskrivna URL-parametrar...

Däremot är det omöjligt att få till validerande kod om du inte antingen fimpar sessionerna helt eller läxar upp PHP till att använda &amp; när den "automagiserar" på PHPSESSID på dina interna länkar osv...

aasahMedlem sedan mars 20034 471 inlägg
#10

Re: Re: Re: Re: Validering och HTML samt '&'

jarvklo skrev:

...Ehm - nu tänker du nog bakvänt!
Det som händer är att PHP kodar &-tecknen den lägger till i t.ex. dina egna (interna) länkars PHPSESSID-attribut som &amp; - Du kan aldrig påverka hur folk kodar de länkar som pekar *till* dig från andra håll och det påverkar inte hur du skriver dina &amp;-tecken i dina "manuellt" inskrivna URL-parametrar...

Däremot är det omöjligt att få till validerande kod om du inte antingen fimpar sessionerna helt eller läxar upp PHP till att använda &amp; när den "automagiserar" på PHPSESSID på dina interna länkar osv...

Åååh! Så det enda som påverkas är den interna länkningen? Om någon skriver in en url (eller använder en url de redan fått av mig) med '&' så funkar det fortfarande. TACKAR! Ska se om jag får ihop det imorgon... :birp

141 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)