webForumDet fria alternativet

XHTML Strict problem

17 svar · 1 012 visningar · startad av BlueVision

BlueVisionMedlem sedan mars 200361 inlägg
#1

Tjena!

Sitter och validerar en sida i XHTML Strict.
Jag få en massa problem med mina menyer!

<a href="?m=1" class="menu">01.information</a>

en sådan rad få en massa fel i validatorn!

Ex:
# Line 38, column 14: cannot generate system identifier for general entity "PHPSESSID"

<a href="?m=1&PHPSESSID=39ab295ad883b83c639df90027dcda4a" class="menu">01.inform
^

# Line 38, column 14: general entity "PHPSESSID" not defined and no default entity (explain...).

<a href="?m=1&PHPSESSID=39ab295ad883b83c639df90027dcda4a" class="menu">01.inform
^

# Line 38, column 23: reference not terminated by REFC delimiter

<a href="?m=1&PHPSESSID=39ab295ad883b83c639df90027dcda4a" class="menu">01.inform
^

# Line 38, column 23: reference to external entity in attribute value

<a href="?m=1&PHPSESSID=39ab295ad883b83c639df90027dcda4a" class="menu">01.inform
^

# Line 38, column 23: reference to entity "PHPSESSID" for which no system identifier could be generated

<a href="?m=1&PHPSESSID=39ab295ad883b83c639df90027dcda4a" class="menu">01.inform
^

# Line 38, column 13: entity was defined here

<a href="?m=1&PHPSESSID=39ab295ad883b83c639df90027dcda4a" class="menu">01.inform
^

Någon som vet en lösning på detta?

//bluevision

jarvkloMedlem sedan juli 20013 295 inlägg
#2

Jupp.

<a href="?m=1[b][red]&[/red][/b]PHPSESSID=39ab295ad883b83c639df90027dcda4a" class="menu">01.inform

Du måste skriva &amp; som separator för länkparametrar när du kör xhtml - bara & är ajabaja och ger dessutom en massa oförståeliga felmeddelanden i validatorn ;)

Ser att du kör PHP förresten...
Och att de parametrar du har problem med är relaterade till PHPs SessionsID som läggs till dina länkar automagiskt...
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 ;)

Se även:
http://se.php.net/session
och
http://se.php.net/manual/sv/configuration.directives.php#ini.arg-separator.output

BlueVisionMedlem sedan mars 200361 inlägg
#3

Jag bockar och bugar!

ini_set("arg_separator.output","&"); är ju en klockren lösning!!

Jag har en annan sak som ni kanske också kan hjälpa till med:

Vad menas med detta???

# Line 84, column 125: document type does not allow element "input" here; missing one of "p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "address", "fieldset", "ins", "del" start-tag

...="edde638c3f295e70bcd99c230bc60722" />
^

# Line 90, column 102: document type does not allow element "input" here; missing one of "p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "address", "fieldset", "ins", "del" start-tag

...e70bcd99c230bc60722" value="submit" />
^

Web-TorMedlem sedan nov. 200011 794 inlägg
#4

Du får gärna posta lite mer kod.

BlueVisionMedlem sedan mars 200361 inlägg
#5

Ok!

Här är valideringsfelet:

Below are the results of attempting to parse this document with an SGML parser.

1. Line 85, column 111: document type does not allow element "input" here; missing one of "p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "address", "fieldset", "ins", "del" start-tag

...="e1e17f51afb7e896d97fc4b39bc909bd" />

Här är raden/raderna i koden:
Det är 85 den klagar på, men jag tog hela snutten ifall det kan hjälpa.

85: 	<form method="post" action=""><input type="hidden" name="PHPSESSID" value="e1e17f51afb7e896d97fc4b39bc909bd" />
  86:   	<p>Username
  87:   	<input type="text" name="user" class="textarea" />
  88:   	Password
  89:   	<input type="password" name="pass" class="textarea" />
  90:   	</p>
  91:   	<p>
  92:   	<input type="image" src="art/login.gif?PHPSESSID=e1e17f51afb7e896d97fc4b39bc909bd" value="submit" />
  93: 	</p>
  94: 	</form>
                                ^

//bluevision

Web-TorMedlem sedan nov. 200011 794 inlägg
#6

Ändra till:

<form>
 <div>
  ...
  ...
  ...
 </div>
</form>
BlueVisionMedlem sedan mars 200361 inlägg
#7

Tyvärr.....den klagar på samma sak nu fortfarande!

Web-TorMedlem sedan nov. 200011 794 inlägg
#8

/r Se svar nedanför.

Web-TorMedlem sedan nov. 200011 794 inlägg
#9

Detta ska funka:

<form method="post" action="">
	<div>
		<input type="hidden" name="PHPSESSID" value="e1e17f51afb7e896d97fc4b39bc909bd" />
		<p>Username
			<input type="text" name="user" class="textarea" />Password<input type="password" name="pass" class="textarea" />
		</p>
		<p>
			<input type="image" src="art/login.gif?PHPSESSID=e1e17f51afb7e896d97fc4b39bc909bd" value="submit" />
		</p>
	</div>
</form>

Troligtvis så missade du att lägga den översta <input>-taggen innanför <div>. ;)

BlueVisionMedlem sedan mars 200361 inlägg
#10

Below are the results of attempting to parse this document with an SGML parser.

1. Line 85, column 111: document type does not allow element "input" here; missing one of "p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "address", "fieldset", "ins", "del" start-tag

...="898a2f93be5d28db0be8c826c5bf9514" />
^

Samma fel fortfarande!!

Web-TorMedlem sedan nov. 200011 794 inlägg
#11

Då är det fel någon annan stans i koden.
Det här funkar utmärkt:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
<head>

	<title></title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>
	<form method="post" action="">
		<div>
			<input type="hidden" name="PHPSESSID" value="e1e17f51afb7e896d97fc4b39bc909bd" />
			<p>Username
				<input type="text" name="user" class="textarea" />Password<input type="password" name="pass" class="textarea" />
			</p>
			<p>
				<input type="image" src="art/login.gif?PHPSESSID=e1e17f51afb7e896d97fc4b39bc909bd" value="submit" />
			</p>
		</div>
	</form>
</body>
</html>
BlueVisionMedlem sedan mars 200361 inlägg
#12

Mycket skumt.....

Så här ser mitt formulär ut nu:

<form method="post" action="">
  	<div>
  	
  	<p>
  	Username
  	<input type="text" name="user" class="textarea" />
  		
  	Password
  	<input type="password" name="pass" class="textarea" />
  	</p>
  	
  	<p>
  	<input type="image" src="art/login.gif" value="submit" />
	</p>
	
	</div>
	</form>
Web-TorMedlem sedan nov. 200011 794 inlägg
#13

Den koden är det inget fel på.

BlueVisionMedlem sedan mars 200361 inlägg
#14

Kan det ha något att göra med att jag incluedar detta på index-sidan?

Det räcker väl med att jag har DOC-Type på index?

//bluevision

sabbacusMedlem sedan juli 2002629 inlägg
#15

En doctype ska finnas längst upp (och då menar jag längst upp, inga enterslag, inga taggar, inga mellanslag före) på _varje_ sida du skapar.

Web-TorMedlem sedan nov. 200011 794 inlägg
#16

Du behöver inte ha doctype i includefilen också.

Om du har tabbar, mellanslag eller radbrytningar innan doctypen spelar ingen roll.

jarvkloMedlem sedan juli 20013 295 inlägg
#17

Hmm...

Du har problem med en input-tagg som ser ut nånting såhär:

<input type="hidden" name="PHPSESSID" value="e1e17f51afb7e896d97fc4b39bc909bd" />

men den input-taggen har du inte med i din kod som ser ut såhär (och f.ö, som sagt är helt korrekt ;) ):

<form method="post" action="">
  	<div>
  	
  	<p>
  	Username
  	<input type="text" name="user" class="textarea" />
  		
  	Password
  	<input type="password" name="pass" class="textarea" />
  	</p>
  	
  	<p>
  	<input type="image" src="art/login.gif" value="submit" />
	</p>
	
	</div>
	</form>

Ditt problem beror på att du kör PHP och att PHP skriver dit en <input />-tagg med PHPSESSID omedelbart efter varje <form>-starttagg automagiskt om man använder sessioner... Vilket bara funkar för (x)HTML Transitional...

Om du tittar lite mer noga på PHP-manualsidan som jag refererade till ovan (dvs http://se.php.net/session ;) ) så står det en liten kryptisk men ack så viktig kommentar där om detta:

url_rewriter.tags string
url_rewriter.tags specifies which html tags are rewritten to include session id if transparent sid support is enabled. Defaults to a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=

Note: If you want XHTML conformity, remove the form entry and use the <fieldset> tags around your form fields.

Du löser antagligen enklast ditt problem genom att ta bort automatiken för <form> såhär:

ini_set("url_rewriter.tags","a=href,area=href,frame=src,input=src,fieldset=");

dvs defaultvärden utan "form=fakeentry"

Om du sedan behöver ha input-taggen med PHPSESSID i formuläret iallafall , så kan du lägga till den "manuellt"

<input type="hidden" name="PHPSESSID" value="<?=session_id(); ?>" />
K@llenMedlem sedan mars 20032 654 inlägg
#18

Lysande jarvklo! :)

Denna tråd löste ett problem jag trixat med nu en stund.

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb