Sönke Tesch: Variable als Parameter übergeben

Beitrag lesen

<a href="i.php?vari=123&vary=blabla">

ist falsch. Siehe http://www.htmlhelp.com/tools/validator/problems.html#amp.

ich versteh nicht ganz... sieht man doch aber immer so, warum soll das denn auf einmal falsch sein...

Wenn tausend Leute aus dem Fenster springen, springst Du dann auch? ;)

ich hab den link schon gelesen, kann mir aber nicht erklären warum...

Sven hat das zwar schon richtig erklärt, aber trotzdem nochmal ganz kurz:

In HTML-Quellcode werden Sonderzeichen per & eingeleitet, zum Beispiel ö für ö, ß für ß, > für > und & für &. Da hinter jedem & also eine Sonderzeichenangabe folgt, kann das & niemals alleine im Quellcode stehen.
Diese Regel gilt im der _gesamten_ HTML-Bereich, also auch beim href-Attribut für <a>.

Selbstverständlich macht der Browser aber auch dort genau das, was er an anderen Stellen mit diesen &-Dingern ("Entities") auch macht: Er ersetzt sie automatisch durch das richtige Zeichen. Hast Du also

<a href="i.php?vari=123&vary=blabla">

im Quellcode stehen, macht der Browser ganz brav daraus die Adresse "i.php?vari=123&vary=blabla" für die Adressleiste.

Daß es auch anders funktioniert, liegt einfach daran, daß die Browser in diesem Punkt sehr fehlertolerant sind - eben weil's beinahe jeder falsch macht. Davon wird es aber nicht richtiger, ein Gewohnheitsrecht gibt es in HTML schließlich nicht :)

irgendwo hab ich auch die definition zu urlparametern gelesen...

der erste paramater wird von der url mit ? getrennt jeder weitere mit &... bitte um erkläreung...

Das ist nur zur Hälfte ganz korrekt. URL-Parameter werden mit dem Fragezeichen eingeleitet, das stimmt schon, aber was dahinter kommt, ist vollkommen egal. Davon unabhängig wird zur Trennung von einzelnen Parametern zwar gerne das Und (also &) benutzt, aber auch das ist nicht zwingend vorgeschrieben. Das W3C bittet beispielsweise angesichts obigem Dauerfehler darum, statt dem Und das Semikolon zu verwenden:

<a href="i.php?vari=123;vary=blabla">

Und das funktioniert auch wunderbar, man muß es nur seinem jeweiligen Skript bzw. dessen Interpreter beibringen; in PHP zum Beispiel mit der (leider in der Anleitung nicht aufgeführten) Einstellung arg_separator.input=";&".

Gruß,
  soenk.e