Hi,
erfrisched trocken wie immer, deine kommentare :-)
hmm, wenn du meinst - ist mir aber weder bewusst, noch meine konkrete Absicht.
echo "<input type=\"password\" name=\"pw\" value=\"$aus_der_datenbank\">";
Das ist fehlerhaftes HTML und/oder fehlerhaftes PHP. htmlspecialchars() fehlt.
Ich habe das, was du nicht mehr zitiert hast, mal zu syntaktisch korrektem PHP ergänzt: Die Backslashes zur Maskierung der Anführungszeichen haben gefehlt. Den Einsatz von htmlspecialchars() habe ich aber noch nicht ergänzt.
und ich fragte mich wieso das in verbindung mit input type password fehlerhaftes HTML sein soll - und ausserdem behandle ich im script formulareingaben eh "zu fuß" per regexp, wie du das so schön formulierst.
Es geht nicht um die Behandlung der Formulareingaben, sondern um die Behandlung der HTML-Ausgaben, hier die Vorbelegung des Eingabefelds. Was ist, wenn das Passwort ein Anführungszeichen enthält? Dann bekommst du tatsächlich fehlerhaftes HTML. Und da man normalerweise möglichst jedes Zeichen in einem Passwort zulassen möchte (auch Anführungszeichen), muss man den Wert, den man da in HTML einschleust, entsprechend behandeln. Der übliche Weg in PHP ist an der Stelle über htmlspecialchars():
echo "<input type=\"password\" name=\"pw\" value=\"", htmlspecialchars($aus_der_datenbank), "\">";
Da man nun nicht mehr einen einzigen Ausdruck als Parameter von echo hat, sondern drei getrennte, kann man auch die konstanten Teile in einfache anstatt doppelte Anführungszeichen setzen und erspart sich so das Gefummel mit dem Escaping der Anführungszeichen:
echo '<input type="password" name="pw" value="', htmlspecialchars($aus_der_datenbank), '">';
wenn ich angenommen zulassen würde (was ich nicht mache) dass jemand im passwort <> und & verwenden darf, will ich doch erst recht nicht dass das übersetzt wird.
Warum willst du das nicht zulassen?
Und doch, genau dann möchte man, dass diese Zeichen ersetzt werden, damit sie vom Browser wieder korrekt interpretiert werden können - nämlich als Teil des Attributwerts, nicht als Sonderzeichen. Vor allem aber auch das Anführungszeichen, das ich in meinem erssten Post vergaß zu erwähnen. Das übersetzt htmlspecialchars() auch in ".
Kann sein. Dann muss man wohl einen anderen Browser verwenden.
sag das mal einem anwender
Sollte normalerweise kein Problem sein: Wenn ein Anwender erkennt (bzw. wenn man ihm klarmacht), dass der bisher verwendete Browser ein bestimmtes gewünschtes Feature nicht bietet, wird er freiwillig umsteigen, wenn ihm das wichtig genug ist.
Ciao,
Martin
Bei der Umsetzung von guten Ideen hapert es meist viel mehr an der Wolle als an der Könne.