Hi!
In dem Fall brauchst du dann doch kein Callback
Du machst mich irgendwie irre ;)
Callback ja, Callback nein... was denn nun?
Es kommt drauf an. Einfache Ersetzungen brauchen keine Callback-Funktion, für komplexere Vorgänge ist es sinnvoll eine zu verwenden. Deine Version mit vorangehendem htmlspecialchars() ist eine einfache Ersetzung, meine mit dem eingebauten htmlspecialchars() wäre ein komplexerer Vorgang.
... weil du nun nur noch ein einfaches Einfügen beim Ersetzen benötigst
Läuft es darauf nicht immer hinaus? Also zumindest von meinem 'Problem' mit dem BBCode ausgehend?
Nö, wie gesagt, kommt auf die Anforderung drauf an.
War denn mein Beispiel mit der Callback-Funktion richtig, damit ich es als 'verstanden' abhaken kann?^^
Von deiner Warte ausgehend, ja.
Allerdings ist das dann stets davon abhängig, dass die Daten schon vorher ge-htmlspecialchars()t wurden, was du beim Wiederverwenden in anderen Projekten berücksichtigen musst. Für sauberer hielte ich es, wenn du bei der Callback-Methode inklusive htmlspecialchars() bliebest, dafür das vorhergehende htmlspecialchars() raushaust und das nl2br() anschließend anwendest.
Mh irgendwie bin ich da anderer Meinung.
Ich halteecho meineFunktion(nl2br(htmlspecialchars($_POST['input'])));
für 'sauberer' alsecho meineFunktion($string);
.
Warum? So sehe ich in der Ausgabe ganz genau wie die Daten be(/miss)handelt werden.
Wenn man davon ausgeht, dass htmlspecialchars() angewendet auf den gesamten String zum richtigen Ergebnis führt, kannst du so argumentieren.
Im zweiteren Fall, muss ich mich immer darauf verlassen, dass die Funktion alles nötige erledigt. Sowas mag ich nicht.
Bitte nenn mir sonst einen Grund der dafür spricht.
Besser ist es immer erst dann zu behandeln, wenn der Kontextwechsel erfolgt und nicht irgendwann vorher. Je weiter beide Zeitpunkte auseinander liegen, desto unübersichtlicher wird das Ganze.
Das ist bei deinen Callback-Funktionen schon der Fall. Wenn man sie sich alleinstehend anschaut, fehlt da die Behandlung. Man kann sie, obwohl sie einigermaßen universell arbeiten, nicht auch für anderen Anwendungsfälle verwenden, ohnen ihnen stets behandelte Daten zu übergeben. Dazu muss man genau wissen, welches Argument wie behandelt werden muss. Schöner wäre es, wenn die Funktionen Rohdaten übergeben bekommen und selbständig die korrekten Maskierungen einfügen.
Und noch ein etwas anderes Szenario: Bei Daten, die als Bestandteil in eine URL eingebaut werden sollen, die dann im HTML landet, muss man zwei Behandlungen vornehmen, urlencode() für die Daten und htmlspecialchars() auf die fertige URL. Wenn diese URL-Daten nur ein Teilstring aus dem eingegebenen Text sind, kannst du nicht den gesamten Text urlencode()ieren, weil dann die an den anderen Stellen stehende Zeichen kaputtgehen.
Danke für deine ausführliche Erklärung zur RegExp!
Wenn ich dich richtig verstanden habe, gleichen sich unsere beiden bis auf das 's'. Das beruhigt mich auch sehr! :)
Nicht ganz, bei mir noch ein i hinzu, dann ist beides gleich.
Lo!