für welchen konkreten Zweck? Ein Escaping, eine Maskierung oder Codierung verwendet man normalerweise, wenn man Daten von einem Kontext in einen anderen überführen will, z.B. PHP-String zu mySQL. Einfach "auf Verdacht" irgendwas escapen ist aber nicht sinnvoll, manchmal sogar nachteilig.
Nunja, Sinn und Zweck ist es, dass man in diesem selfmade Forum etwas eingeben soll. Und damit da kein Murks eingegeben werden kann (SQLInjection etc.), hat man mir beigebracht muss ich das escapen. Und genau das tu ich doch.
public function Escape($String) {
$String = $this->Link->real_escape_string($String); $String = nl2br(htmlentities($String),ENT_QUOTES); return $String; }
>
> Hier kombinierst du schon zwei Dinge, die sich widersprechen. Einerseits real\_escape\_string(), das einen String für den SQL-Kontext aufbereitet, und andererseits nl2br(), das eindeutig auf die Übergabe in HTML zugeschnitten ist.
Gut, das habe ich jetzt verstanden. Also muss ich es so machen: 1. User gibt etwas ein, 2. real\_escape\_string(), damit der Kram ohne Probleme in die Datenbank geschrieben wird UND dabei keine Injection benutzt werden kann, 3. beim Auslesen aus der DB erst htmlentities & nl2br anwenden, da es ja jetzt erst an die HTML Anzeige geht und dementsprechend jetzt erst das ganze angezeigt werden soll. Richtig so?
> > 1. Wieso werden nicht alle Zeichen umgewandelt? zb. <br /> bleibt <br /> anstatt umgewandelt zu werden.
>
> Doch, es wird umgewandelt. <br />\r\n wird von htmlentities() zu <br />\r\n gewandelt, und von nl2br() schließlich zu <br /><br />\r\n. Es ist ein Trugschluss, dass nl2br() Zeilenumbrüche (\r) in <br> \_umwandelt\_, stattdessen fügt es nur ein <br /> hinzu und lässt den eigentlichen Zeilenumbruch noch stehen. Auf diese Weise entsteht auch im HTML-Quellcode ein Zeilenumbruch nach dem <br />.
Danke, hatte ich nicht gemerkt.
> > 2. Die Sachen die encodet wurden zb. </div> sind doch richtig encodet, sie müssten mir doch im Forum als <div> angezeigt werden, oder? Tun sie aber nicht. Sie stehen dort genau so wie hier.
>
> Dann machst du noch weitere Fehler, die aus dem gezeigten Code nicht hervorgehen. Beispielsweise einen weiteren Aufruf von htmlentities(), der die & noch zu & konvertiert.
Ja, das wars tatsächlich. Danke.