Hi!
'tschuldigung, ich hatte nicht so genau hingesehen, welches Muster du da verwendest. Ja, dafür bietet sich - wenn du es richtig machen willst - die Verwendung einer Callback-Funktion an.
Mh und wie müsste die Funktion dann aussehen? Könnten wir das vielleicht ein Stück für mich erarbeiten?
So wie mein anchor-Beispiel.
Wenn du in deinem Beispiel nur preg_replace() verwendest, hast du eine XSS-Lücke, weil du die HTML-Sonderzeichen nicht behandelst.
Inwiefern? Was kann mir da passieren?
Du willst ja nicht, dass HTML eingegeben werden kann, weswegen du ja auf BB-Code ausweichst und damit die Eingaben mit der stark vereinfachten Syntax in ihren Möglichkeiten beschränkst. Du möchtest nun sicher nicht, dass jemand <script> und anderes Zeug eingibt und damit deine Seite nach Belieben umgestaltet werden kann. Deswegen müssen alle Zeichen mit Sonderbedeutung in HTML in ihrer maskierten Form notiert werden => htmlspecialchars().
Und wieso muss ich beim suchen und ersetzen HTML-Sonderzeichen beachten? Ich dachte die spielen erst bei der Ausgabe eine Rolle?
Beim Ersetzen verwendest du bereits HTML-Code, in den du die Suchbruchstücke einbettest. Zu diesem Zeitpunkt muss schon syntaktisch korektes HTML entstehen, weil du später nicht mehr unterscheiden kannst, ob ein < zu einem von dir gewollten Tag-Beginn gehört oder vom Anwender eingegeben wurde.
Ein mehrfacher Aufruf, also für jedes Suchmuster einer wäre sinnvoll, denn als Callback kann man nur einen einzelnen angeben. Das heißt, der Callback müsste für alle Suchmuster gleichermaßen umgehen können, wenn du ein Array an Suchmustern verwenden wolltest.
Ja das versteh ich nicht.
Wenn die Callback-Funktion mit allem gleich umgeht müsste ich ja in der Funktion wieder ein Array bereit halten in dem alle möglichen RegExp stehen um dagegen zu vergleichen, oder?
Ja, und genau das ist ja nicht sehr sinnvoll. Du ermittelst erst alle Muster, wirfst sie in einen Topf (eine gemeinsame Callback-Funktion) und musst sie dann wieder erst voneinander unterscheiden, also mehr oder weniger nochmal neu erkennen. Dann lieber eine Einzelbearbeitung.
Ja, für Links. Für Bilder wäre dann eine image()-Funktion angebracht und für usw. eine usw()-Funktion :-)
Unterscheiden die sich denn so gravierend? Sollte man für sowas dann auch gleich eine Klasse anlegen?
Ja, natürlich. Die Syntax vom a-Element unterscheidet sich vom img-Element und das wiederum vom usw.-Element. Einige sind gleich (zum Beispiel b, u, i), für die kannst du eine gemeinsame Funktion erstellen (der dann über eine dritte RegExp-Gruppe mitgeteilt werden sollte, welches der Elemente vorliegt, um das richtige HTML-Element in die Ausgabe zu bringen).
Lo!