Avatar billede mik789 Nybegynder
04. marts 2004 - 10:39 Der er 27 kommentarer og
2 løsninger

PHP giver fejl i HTML validatoren

Jeg er i gang med at validere nogle sider.
Denne side: http://www.musicandmeaning.net/issues.php

giver flg. (og flere lignende) fejl:

Line 86, column 76: cannot generate system identifier for general entity "PHPSESSID"

  1.  Line 86, column 76:  cannot generate system identifier for general entity "PHPSESSID"

  ...href="issues/editorial.php?artID=1.1&PHPSESSID=39177215bc2a0ad7b277aba26bb05f
                                          ^

Den kode det drejer sig om er:

echo "<p class=\"overskrift\"><a href=\"issues/editorial.php?artID=$nr.1\"><b>$key</b></a></p>\n";

Den tilsvarende linje i dokumentet ser sådan ud med "vis kode":

<p class="overskrift"><a href="issues/editorial.php?artID=1.1"><b>Editorial</b></a></p>

Altså helt OK (og siden vises også som den skal). Så hvad er det egentlig validatoren ikke kan finde ud af?

//mik
Avatar billede mik789 Nybegynder
04. marts 2004 - 10:45 #1
tegnet ^ har forskudt sig i ovenstående. I fejlrapporten står det under det første "P" i "PHPSESSID"
Avatar billede mik789 Nybegynder
04. marts 2004 - 10:57 #2
OK, jeg er vist selv lidt på sporet. Sammen med min php variabel  $nr sender serveren min php session id, som åbenbart ser sådan ud: &PHPSESSID=39177215bc2a0ad7b277aba26bb05fe1 - og det kan valadatoren ikke finde ud af, måske simpelt pga det første "&" ??? Hvad gør man?
Avatar billede exp Juniormester
04. marts 2004 - 10:59 #3
Har tidligere siddet i samme situation, og der fandt vi ud af, at der ikke er meget at gøre... så vidt jeg husker, er det fordi sessionsbehandlingen ikke er helt korrekt, men er ikke sikker.
Avatar billede mik789 Nybegynder
04. marts 2004 - 11:02 #4
"sessionsbehandlingen" - er det noget jeg selv kan gøre noget ved tror du?
Avatar billede exp Juniormester
04. marts 2004 - 11:06 #5
Altså hvis din server behandler sessions 100% korrekt, så kan du ikke, så er det klienten...
(ved godt det er et latterligt svar, men kan ikke lige finde på andet at skrive :-)
Avatar billede mik789 Nybegynder
04. marts 2004 - 11:15 #6
og "klienten" i dette tilfælde er vel W3C's html validator. OK, men det vil sige det kan også være fordi serveren hvor siden ligger ikke sender en korrekt udformet sessionsID for denne variabel...? Nå, men det kan jeg jo ikke rigtig gøre noget ved, som du også siger. Tja, så har man da gjrot hvad man kunne.
jeg lader lige sp. stå hvis andre kan bidrage med mere info.
Avatar billede muddi Praktikant
04. marts 2004 - 11:41 #7
Det er vidst fordi den betragter alt efter & som værende en tegnkode. Eks. &amp; = &
Derfor tror den, at &PHPSESSID=blablabla er en tegnkode... Jeg fandt engang en løsning på problemet, men det er et par år siden, og jeg kan virkelig ikke huske hvad løsningnen var :o)

/Morten
Avatar billede mik789 Nybegynder
04. marts 2004 - 12:06 #8
muddi> ja, det er klart, det er det der sker. det var også hvad jeg mente med "det kan valadatoren ikke finde ud af, måske simpelt pga det første "&"
Avatar billede muddi Praktikant
04. marts 2004 - 12:13 #9
Er ret sikker på at det er muligt at ændre seperatoren til andet end &, men jeg ved ikke om det er nogen holdbar løsning?
Avatar billede mik789 Nybegynder
04. marts 2004 - 12:19 #10
problemet er at det jo ikke er mig dig sætter den separator. det er noget serveren sender
Avatar billede muddi Praktikant
04. marts 2004 - 12:26 #11
Det kan lade sig gøre. Hvis du ændrer følgende i php.ini

arg_separator.input og arg_separator.output

Til noget andet end &
Avatar billede mik789 Nybegynder
04. marts 2004 - 12:59 #12
muddi>jamen, det ligger jo ikke på min egen server, men på en server "ude i byen"
Avatar billede exp Juniormester
04. marts 2004 - 13:12 #13
Det kan muligvis indstilles med en .htaccess, men er ikke sikker...
Avatar billede mik789 Nybegynder
04. marts 2004 - 14:07 #14
hmmmn, man ender nemt det sædvanlige sted: hvor maeget skal man gøre ud af at få W3C's validator til at smide det der html ikon ud, når siden i øvrigt vises perfekt på IE, NS, Mozilla og der heller ikke er fejl i koden som den modtages af browserne? Er det umagen værd?
Avatar billede jakoba Nybegynder
04. marts 2004 - 16:13 #15
Det er faktisk ukorrekt når vi skriver
  href="fil.ext?param1=1&param2=2&param5=3"
det virker godt nok, men vi burde skrive:
  href="fil.ext?param1=1&amp;param2=2&amp;param5=3"
(dvs skrive '&'-tegnet som en html-entity.)
det er det validatoren brikker sig over.

mvh JakobA
Avatar billede mik789 Nybegynder
04. marts 2004 - 16:19 #16
jakoba> det forstår jeg godt, men i det her tilfælde har jeg også bare skrevet:

echo "<p class=\"overskrift\"><a href=\"issues/editorial.php?artID=$nr.1\"><b>$key</b></a></p>\n";

"&"'et kommer fra serveren der sender en sessionsID for variablen $nr. Og den ser som sagt sådan ud: &PHPSESSID=39177215bc2a0ad7b277aba26bb05fe1 - dvs. med "&" uden html-entity allerførst. Men da siden ligger på en serrver ude i byen jeg ikke har adgeng til, kan jeg vel ikke gøre så meget.
Avatar billede mik789 Nybegynder
04. marts 2004 - 16:26 #17
I øvrigt hvis I tjekker for validering nu på siden, får I en meget alvorligere fejl: NO DOCTYPE! [osv.] Men det er igen pga den måde W3C validerer. De validerer ikke bare dokumentet som det sendes til browserne, for i dette tilfælde er der tale om en test i starten af dokumentet der replacer dokumentet alt efter om en variabel er sat. W3C vil have doctypen helt op ved første test (inden replace()), og ikke igen derefter. Men så sendes der jo en side uden doctype til browseren, og siden går så i quirks mode, hvad den ikke må. Derfor er jeg nødt til at sætte doctypen ind lige efter replace(), og jeg får så et "korrekt" dokument til browseren. Hvis jeg i stedet for at bruge W3C's validator bruger "Validate local html" (Mozilla Firefox) er den da også fejlfri. Og det er godt nok for mig.
Avatar billede muddi Praktikant
04. marts 2004 - 18:33 #18
Så er jeg tilbage. Hvis du ikke har adgang til php.ini, kan du som exp skriver bruge .htaccess.
Lav en .htaccess fil i roden af dit webhotel (den nederste mappe der er mulig at tilgå via browseren) og indsæt følgende kode:

php_value arg_separator.output "&amp;"
php_value arg_separator.input "&"

Løsningen virker kun, hvis der er tale om en apache server. Hvis du kører på en anden server kan det ikke lade sig gøre på den måde :)
Avatar billede mik789 Nybegynder
04. marts 2004 - 18:45 #19
muddi> det har jeg ikke prøvet før. skal lige være sikker: jeg laver en txt-fil med f.eks. navnet send_amp.htaccess og dine to linjer som eneste indhold, og den lægger jeg i roden af mit site (og tjekker at serveren er en Apache). Right?
Avatar billede muddi Praktikant
04. marts 2004 - 18:53 #20
Du skal ikke skrive noget før .htaccess. Filen hedder ".htaccess". På Apache betyder et indledende ".ht" at filen skal holdes skjult for browsere. Det vil sige at du ikke kan få filen vist, hvis du f.eks. prøver at skrive http://www.domain.dk/.htaccess
Avatar billede mik789 Nybegynder
04. marts 2004 - 19:05 #21
nå, jeg kan ikke få svar fra web hotellet før engang i morgen. Det er b-one - og vi har en opsætning med en MySQL database og phpMyAdmin. Betyder det at serveren så automatisk er en Apache?
Avatar billede muddi Praktikant
04. marts 2004 - 19:09 #22
Nej, men det er næsten sikkert. Det mig bekendt ikke stabilt, at køre en driftserver med PHP og MySQL på en Windåse.
Avatar billede muddi Praktikant
04. marts 2004 - 19:12 #23
Den er ikke til megen gavn, men har du kigget her: http://www2.b-one.net/static.php?page=faq7.php
Jeg kender ikke meget til b-one's produkter, men tror du ikke at du kan finde phpMyAdmin hvis du logger ind på "Kontrolpanel"?
Avatar billede muddi Praktikant
04. marts 2004 - 19:56 #24
Sorry, mit sidste indlæg skulle har intet med det her at gøre :o) Forkert spm.
Avatar billede mik789 Nybegynder
04. marts 2004 - 23:52 #25
jeg kan sagtens komme ind i phpMyAdmin, men der er ingen information om serveren der, og deres såkaldte faq er er en sludder for en sladder... er vist nødt til at vente til jeg får et mail svar fra dem.
Avatar billede muddi Praktikant
05. marts 2004 - 09:41 #26
Prøv at lave en php-side, hvor du skriver

phpinfo();

Så er du ikke længerer i tvivl :o)
Avatar billede mik789 Nybegynder
05. marts 2004 - 15:05 #27
muddi> nååhh ja det kunne jeg jo bare have gjort. imellemtiden har de svaret: der er en Apache, så nu prøver jeg dit trick.
Avatar billede mik789 Nybegynder
05. marts 2004 - 15:13 #28
prøvede, men det kunne serveren ikke li':

"The server encountered an internal error or misconfiguration and was unable to complete your request."

Til gengæld viser det sig at når jeg i stedet for W3C's validator bruger min Firefox' Web Developer Tools' "Validate Local HTML", så er der ingen fejl. Tja, jeg tror jeg slår mig til tåls.

Men tak skal du ha, muddi, for besværet. Du får point, når jeg lige har hørt exp om han vil være med.

exp>læg et svar, så deler I pointene.
Avatar billede exp Juniormester
05. marts 2004 - 15:14 #29
skal da ikke have point for den smule :-)
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