Archiv für November 2010

cannot generate system identifier for general entity

Mittwoch, 17. November 2010

Der  W3 Validator meckert immer rum bei Variablenübergabe per “&” Trennung, also wenn die Variablen für ein Dokument per  URL mitgegeben werden, in etwa so:

http://www.domain.de/bestellen.php?ART=123&MENGE=20&KDNR=50123&TEXT=bitte+heute+liefern

Könnte man über ein Formular lösen, sicher, geht aber nicht immer. Ganz schlaue Leute in diversen Foren empfehlen, aus dem “&” Entity ein”&” zu machen ! Das geht natürlich nicht, ganz klar.

Daher hier ein anderer aber simpler Lösungsvorschlag, welcher auch funktioniert:

1.) Die Variablen per Sonderzeichen trennen (in diesem Fall per “|”) und als Gesamtvariable übergeben:

http://www.domain.de/bestellen.php?BESTELLUNG=123|20|50123|bitte+heute+liefern

2.)  In dem Dokument diese Variable auf Existenz überprüfen und die Subvariablen per explode abfragen:

if (isset($BESTELLUNG))
{

$BESTELLUNG_TEILE = explode(“|”,$BESTELLUNG);

$ART=$BESTELLUNG_TEILE[0];

$MENGE=$BESTELLUNG_TEILE[1];

$KDNR=$BESTELLUNG_TEILE[2];

$TEXT=$BESTELLUNG_TEILE[3];

}

————————

Das hat viele viele viele Vorteile:

1.) ich kann ENDLICH Texte übergeben, welche auch ein “&” enthalten oder ein anderes entity

2.) sehr einfach umzuprogrammieren

3.) auch Javascript Links können so codiert werden

4.) sicherheitsrelevanter, da die Variablen nicht mehr mit dem Zusatz des Variablennamens übergeben werden (ART=123&Menge=20) sondern als Parameterstring, welcher eine feste Synthax erfordert. Fehlt hier ein Parameter oder kommt einer mittendrin dazu, ist die Reihenfolge nicht mehr korrekt und mit einer Abfrage per”if (Count($BESTELLUNG_TEILE)!=4) echo “MANIPULIERT” kann man diesen Aufruf als manipuliert verwerfen.