Kalle_B: Datenbankeinträge mit & ergeben Validierungsfehler

Hallöle,

habe meine Seiten zum Testen mal wieder der Validierung unterworfen.

Und siehe da, jede Menge Fehler in der Art:
Line 210, Column 108: cannot generate system identifier for general entity "id".

…ungen_der_region.html?aktion=details&id=756&monat=09&jahr=2008&ort=Kallstadt&

&id gefällt ihm nicht. Der Link wird jedoch von Benutzern in die Datenbank eingegeben und funktioniert auch.

Gibt es ein PHP- Kommando, das alleinstehende & zu   macht?

Oder wwelche Maßnahme könnte ich sonst ergreifen?

LG Kalle

  1. Hallo Kalle,

    …ungen_der_region.html?aktion=details&id=756&monat=09&jahr=2008&ort=Kallstadt&

    &id gefällt ihm nicht. Der Link wird jedoch von Benutzern in die Datenbank eingegeben und funktioniert auch.

    Gibt es ein PHP- Kommando, das alleinstehende & zu   macht?

    siehe den Kasten "Anmerkungen" auf der Handbuchseite von urlencode.

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,

      siehe den Kasten "Anmerkungen" auf der Handbuchseite von urlencode.

      Danke, htmlentities() ist mein Freund.

      Und ja, statt   könnte ich & nehmen ;-)

      LG Kalle

    2. echo $begrüßung;

      siehe den Kasten "Anmerkungen" auf der Handbuchseite von urlencode.

      Die Parameter trennenden & gegen ; auszutauschen, damit es damit kein Problem mit HTML-gerechter Notierung gibt, ist gefahrlos nur bei Links auf die eigenen Seiten möglich. Bei den meisten von Benutzern eingegebenen URLs dürfte das nicht der Fall sein.

      Damit sowohl ; als auch & von PHP als Trennzeichen verwendet werden können, muss man die Direktive arg_separator.input auf ;& umschreiben. Das geht jedoch nur vor dem Scriptstart (also in der php.ini oder spätestens in der Per-Verzeichniskonfiguration des Apachen, wenn PHP als Modul läuft). Bei der Gelegenheit kann man gleich noch arg_separator.output auf ; oder wenigstens das HTML-gerechte & umschreiben.

      echo "$verabschiedung $name";

  2. Hi,

    Gibt es ein PHP- Kommando, das alleinstehende & zu   macht?

    Das geht wohl am besten mit einem regulären Ausdruck, da du ja nicht alle & umwandeln musst, sondern nur die, denen nicht sowas wie "nbsp;", "amp;", ... folgt.

    Oder wwelche Maßnahme könnte ich sonst ergreifen?

    Du könntest es auch in & umwandeln, was mehr Sinn machen würde. ;-)

    mfG,
    steckl

  3. echo $begrüßung;

    habe meine Seiten zum Testen mal wieder der Validierung unterworfen.

    Und siehe da, jede Menge Fehler in der Art:
    Line 210, Column 108: cannot generate system identifier for general entity "id".

    …ungen_der_region.html?aktion=details&id=756&monat=09&jahr=2008&ort=Kallstadt&

    &id gefällt ihm nicht.

    Es ist immer wieder das gleiche Problem, was hier im Forum ständig wiederholt werden muss: Kontextgerechte Behandlung von Werten.

    Du bringst einen Wert in einen HTML-Kontext, also musst du den Wert HTML-gerecht notieren. Dazu gehört auch, dass ein & als &amp; zu notieren ist, ebenso wie < und > und in Attributwerten abhängig vom Begrenzungszeichen auch " und ' umgeschrieben werden müssen.

    Der Link wird jedoch von Benutzern in die Datenbank eingegeben und funktioniert auch.

    Dann sorge dafür, dass diese Benutzerangaben, wann immer du sie in einen anderen Kontext bringst, dementsprechend behandelt werden.

    echo "$verabschiedung $name";