Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; breadcrumb has a deprecated constructor in /kunden/dciwam.de/webseiten/dciwam/includes/class.breadcrumb.inc.php on line 23
Unerklärliche Fehlermeldung bei Link mit Parameterübergabe
(general entity not defined)
Bei der Validierung eines Dokuments meldet der Validator folgenden Fehler:
Line 111, column 22: ... <a href="/script.cgi?blubb=dingdong&bla=brabbel& ... Error: general entity "bla" not defined and no default entity
Was mache ich falsch?
Das "&" ist ein Sonderzeichen, dass in HTML-Dokumenten grundsätzlich als "&" geschrieben werden muss, damit die Seite valid ist. Das gilt auch, wenn es in einem Link vorkommt.
Der Attributwert von href ist zwar eine URI-Referenz, doch diese ist CDATA und muss in HTML korrekt maskiert werden. Dies bedeutet, dass jedes &, welches als Parameterseparator dient, als & geschrieben werden muss. Richtig wäre also:
<a href="/script.cgi?blubb=dingdong&bla=brabbel& ...
Das W3C empfiehlt, in href- und src-Attributen statt & ein Semikolon (;) als Parameterseparator zu verwenden. Dies benötigt aber in der Regel eine Anpassung des verarbeitenden Skripts. Das häufig benutzte Perl-Modul CGI.pm unterstützt sowohl ; als auch & als Parameterseparator. Dies ist sowieso sinnvoll, da dann auch per GET übertragene Formulare, welche vom Browser her stets & als Separator verwenden, immer noch funktionieren.
Um in von PHP erzeugten URIs & durch & zu ersetzen, muß in der Konfigurationsdatei php.ini die Anweisung
arg_separator.output = "&"
notiert werden. Wobei als Trennzeichen das Semikolon (;) statt & noch besser geeignet wäre (sofern nicht Formulare verarbeitet werden sollen).
Siehe auch:
- http://www.w3.org/TR/REC-html40/appendix/notes.html#ampersands-in-uris
- http://ppewww.ph.gla.ac.uk/~flavell/www/formgetbyurl.html
Da wird aufgezeigt, was im Zusammenhang mit Parameterübergabe in der URL so alles schieflaufen kann.
Daniel Werner • dw@dur.chLars Kasper • mail@LarsKasper.de