HTML Encoding von & (Ampersand) zu & bei Variablenübergabe

Hellstorm

Cadet 4th Year
Registriert
Nov. 2008
Beiträge
111
[gelöst] Encoding von & (Ampersand) zu & bei Variablenübergabe

Moin,

ich hab jetzt schon etwas rumgegooglet, bin aber zu keinem Ergebnis gekommen.

Folgendes: Variablen für PHP übergibt man ja mit file.php?name=hans&stadt=hanshausen

Nur, was ist nun richtiger: Wenn ich das Variablen-Trennzeichen "&" im HTML Quelltext als "&" schreibe, oder wenn ich es als "&" kodiere, also z.B.:
HTML:
<a href="file.php?name=hans&amp;stadt=hanshausen">...</a>
Firefox meckert bei der Quelltext-Anzeige z.B. rum, wenn ich nur & schreibe statt &amp;. Aber irgendetwas wirklich Einheitliches konnte ich da noch nicht finden.


Gelöst: &amp; muss verwendet werden: https://www.computerbase.de/forum/t...bei-variablenuebergabe.1063530/#post-12069437
 
Zuletzt bearbeitet: (gelöst)
Stichwort "URL encoding". %20 für Leerzeichen kennst du sicherlich, für das &-Zeichen ist es %26

Greetz
 
Natürlich, aber das führt dazu, dass ich ein "&" innerhalb einer Variablen im URL übergeben kann. Mir geht es aber ausschließlich um das "&" als Trennzeichen zweier Variablen. Dafür gibt es ja im HTML-Code die zwei Schreibweisen "&" sowie "&amp;".

Die Fehlerkonsole von Firefox meckert, wenn ich das "&" unkodiert in den URL packe und weist mich darauf hin "&amp;" zu nehmen. Aber ich finde keinen Hinweis im Internet, der mir sagt, wie es nun wirklich korrekt in den HTML-Quelltext muss (als "&" oder "&amp;").
 
Das & als Einzelzeichen muss in HTML *immer* als &amp; kodiert werden, egal in welchem Kontext (Fließtext, Attributinhalt) es steht. Das liegt daran das es eben die Sonderbedeutung als Beginn einer Escape-Sequenz hat.
 
Wenn du einen GET-Parameter einleiten willst, dann wird das '&' eben nicht als ampersand maskiert.

Beispiel:
HTML:
<a href="index.php?pageid=1&suche=Brot%26Butter">Brot&amp;Butter</a>
 
Falsch. Ich kriegs grad aus der Spec selbst nicht ganz abgeleitet, aber ein & anstelle von &amp; ist nur erlaubt wenn man HTML 5 verwendet und wenn darauf ein WhiteSpace folgt, ansonsten ist es ein " ambiguous ampersand " und invalid. In HTML 4 und älter ist es immer ungültig.

http://mathiasbynens.be/notes/ambiguous-ampersands
 
Die Browser machen das aufgrund interner Fehlerkorrektur zwar mit wenn man nicht umschreibt, aber es gibt Fälle in denen das versagt und nicht das gewünschte dabei rauskommt (vor allem wenn der nachfolgende Text auf eine Zeichenreferenz passt). Wenn man immer &amp; schreibt ist man auf der sicheren Seite (und hat auch gültigen HTML-Code)
 
Ja, was passiert wenn man mal nicht maskiert, obwohl der Browser es zwingend erwartet, das hab ich mal im offiziellen WoW-Forum erlebt. Da hatte ein recht aktives Forenmitglied ein & im Gildennamen... und Blizzard waren zu blöde, das Zeug zu escapen. Die Folge: IE zeigte alles an (da weißte auch, womit Blizzard testen), Chrome renderte bis zum ersten Beitrag mit diesem Gildennamen, FF warf direkt einen XML-Error.
 
Zurück
Oben