Big-Gremlin
02.09.2009, 00:46:52
ich arbeite nun schon nen ganzes Stück mit PHP, aber hab mir darüber noch nie Gedanken gemacht ;)
ich hoff ich bekomm jetzt keinen Forenverweis, wegen unglaublicher Dummheit *fgg
und zwar folgendes:
Frage 1
bis jetzt hab ichs immer so gemacht, dass ich vorm Speichern in die DB htmlspecialchars() angewendet hab...so wird der Text gleich formatiert und ich kann ihn sorgenfrei ausgeben
jetzt kam mir aber der Gedanke, dass wenn man bei einer Registrierung den Namen auf 10 Zeichen beschränkt man in der Datenbank ja auch nur 10 maximale Zeichen angeben brauch
abgesehen davon, dass ich solche irrsinnigen Benutzernamen mit sämtlichen Sonderzeichen verabschäue gibt es doch immer wieder solche Spezies, die ihren Benutzernamen schmücken
z.B.
<<Troll>> [9 Zeichen, würde also passen]
in die Datenbank speichert er es aber als <<Troll>>
ok....da ist noch nicht das Problem....ich kann auch normal speichern und erst bei der Ausgabe htmlspecialchars() verwenden.
ABER
wenn ich das mach, hab ich das Problem bei Formularen...angenommen jemand gibt 11 Zeichen mit Sonderzeichen bei seinem Benutzernamen an....dann kommt eine schicke Fehlermeldung "Name zu lang", aber der eingegebene Name bleibt trotzdem im Input-Feld vorhanden.
Beim Ausgeben im Input-Feld muss ich jedoch auch htmlspecialchars() verwerden, sonst könnte man ja einfach das Input-Feld schließen und bißl Murx schreiben.
Wenn der Benutzer seinen Namen korrigiert hat und erneut abschickt, werden die Werte aus dem Input-Feld genommen, also wieder <<Troll>>, obwohl es ordnungsgemäß angezeigt wird. Dann müßte ich htmlspecialchars() vor dem Speichern erst wieder Rückgängig machen, damit es auch korrekt gespeichert wird.
wenn man im Textfeld jetzt aber Codezeilen eingeben will (also z.B. irgend was mit &), dann gibts hier wieder das Problem, dass WENN man htmlspecialchars() vor dem Speichern rückgängig macht (weil man ja will, dass der Text wie er angezeigt wird gespeichert wird), aus & ein & wird. Der Benutzer der dann den Text liest (sei es als PN oder als Forenbeitrag) wird wie gesagt nur, dass & sehen, obwohl & gewollt war.
(PS: ich weiß, dass es den HTML-Tag "CODE" gibt, aber der soll auch nur dafür verwendet werden und nicht nur für ein Wort ;) )
Ich hoff es gibt noch jemanden der bis hierhin durchgeblickt hat...vllt hab ichs komplizierter erklärt als es ist.....bin damit leicht überfordert.....n guter Rat würde mir sehr helfen ;)
Frage 2 (bezieht sich im Endeffekt auf Frage 1)
wenn ich zb & direkt eingebe, macht der daraus (obwohl htmlspecialchars() oder htmlentities() verwendet wurde) ein &. Ich könnte eine Funktion basteln die aus & ein &amp; macht, aber wie beim oben angesprochenen Problem wird mit jeder Eingabe mit einem zusätzlichen & wieder ein &amp; und daraus ein &amp;amp; usw.
Jetzt könnte ich eine Funktion basteln die das filtert, also aus &amp; & macht.....aber dann könnte man auch wieder die Sachen eingeben die gefiltert werden und das geht ewig so weiter. Und so ein hin und her will ich mir auch ersparen
meine Frage: wie bekomm ich das gespeichert, was eingegeben wird......was man aber so ausgeben kann, dass es ordentlich angezeigt wird?
EDIT: ok, wenn ichs bei der Ausgabe mach funktionierts..... wenn ich die $_POST Variable mit htmlspecialchars() verseh, als Variable speicher und dann ausgeb funktionierts nich....soll mal einer verstehen
oar das is so verwirrend ^^
Meine Frage
ich hoff ich bekomm jetzt keinen Forenverweis, wegen unglaublicher Dummheit *fgg
und zwar folgendes:
Frage 1
bis jetzt hab ichs immer so gemacht, dass ich vorm Speichern in die DB htmlspecialchars() angewendet hab...so wird der Text gleich formatiert und ich kann ihn sorgenfrei ausgeben
jetzt kam mir aber der Gedanke, dass wenn man bei einer Registrierung den Namen auf 10 Zeichen beschränkt man in der Datenbank ja auch nur 10 maximale Zeichen angeben brauch
abgesehen davon, dass ich solche irrsinnigen Benutzernamen mit sämtlichen Sonderzeichen verabschäue gibt es doch immer wieder solche Spezies, die ihren Benutzernamen schmücken
z.B.
<<Troll>> [9 Zeichen, würde also passen]
in die Datenbank speichert er es aber als <<Troll>>
ok....da ist noch nicht das Problem....ich kann auch normal speichern und erst bei der Ausgabe htmlspecialchars() verwenden.
ABER
wenn ich das mach, hab ich das Problem bei Formularen...angenommen jemand gibt 11 Zeichen mit Sonderzeichen bei seinem Benutzernamen an....dann kommt eine schicke Fehlermeldung "Name zu lang", aber der eingegebene Name bleibt trotzdem im Input-Feld vorhanden.
Beim Ausgeben im Input-Feld muss ich jedoch auch htmlspecialchars() verwerden, sonst könnte man ja einfach das Input-Feld schließen und bißl Murx schreiben.
Wenn der Benutzer seinen Namen korrigiert hat und erneut abschickt, werden die Werte aus dem Input-Feld genommen, also wieder <<Troll>>, obwohl es ordnungsgemäß angezeigt wird. Dann müßte ich htmlspecialchars() vor dem Speichern erst wieder Rückgängig machen, damit es auch korrekt gespeichert wird.
wenn man im Textfeld jetzt aber Codezeilen eingeben will (also z.B. irgend was mit &), dann gibts hier wieder das Problem, dass WENN man htmlspecialchars() vor dem Speichern rückgängig macht (weil man ja will, dass der Text wie er angezeigt wird gespeichert wird), aus & ein & wird. Der Benutzer der dann den Text liest (sei es als PN oder als Forenbeitrag) wird wie gesagt nur, dass & sehen, obwohl & gewollt war.
(PS: ich weiß, dass es den HTML-Tag "CODE" gibt, aber der soll auch nur dafür verwendet werden und nicht nur für ein Wort ;) )
Ich hoff es gibt noch jemanden der bis hierhin durchgeblickt hat...vllt hab ichs komplizierter erklärt als es ist.....bin damit leicht überfordert.....n guter Rat würde mir sehr helfen ;)
Frage 2 (bezieht sich im Endeffekt auf Frage 1)
wenn ich zb & direkt eingebe, macht der daraus (obwohl htmlspecialchars() oder htmlentities() verwendet wurde) ein &. Ich könnte eine Funktion basteln die aus & ein &amp; macht, aber wie beim oben angesprochenen Problem wird mit jeder Eingabe mit einem zusätzlichen & wieder ein &amp; und daraus ein &amp;amp; usw.
Jetzt könnte ich eine Funktion basteln die das filtert, also aus &amp; & macht.....aber dann könnte man auch wieder die Sachen eingeben die gefiltert werden und das geht ewig so weiter. Und so ein hin und her will ich mir auch ersparen
meine Frage: wie bekomm ich das gespeichert, was eingegeben wird......was man aber so ausgeben kann, dass es ordentlich angezeigt wird?
EDIT: ok, wenn ichs bei der Ausgabe mach funktionierts..... wenn ich die $_POST Variable mit htmlspecialchars() verseh, als Variable speicher und dann ausgeb funktionierts nich....soll mal einer verstehen
oar das is so verwirrend ^^
Meine Frage