Nachdem ich bereits mehrfach gefragt worden bin, wie die Funktion str_replace denn nun genau funktioniert, die ich im Tutorial zu den Zitateboxen erwähnt habe, möchte ich nun doch näher darauf eingehen, weil es bisher kein Tutorial gibt, das sich gezielt mit der Stringmanipulation befasst.
In diesem ersten Tutorial möchte ich nun erklären, wie das Ersetzen einer Zeichenfolge mit Hilfe der beiden Funktionen str_replace und eregi_replace funktioniert.
Diese Funktionen kommen auch bei der Umwandlung von bbCode in HTML-Zeichen zum Einsatz, sodass ihr euch damit auch benutzerdefinierte Funktionen zusammenbauen könnt. Darauf werde ich später noch eingehen.
Zunächst einmal knüpfen wir uns die Funktion str_replace vor.
Diese benötigt drei Argumente, die Zeichenfolge, nach der sie suchen soll, die Zeichenfolge, durch die die Treffer ersetzt werden sopllen, und den String, in dem die Manipulation durchgeführt werden soll.
Den Rückgabewert übergibt man rationellerweise an eine Avriable, man kann auch den alten Inhalt des Strings überschreiben.
Das Ganze sähe dann zum Beispiel etwa so aus:
(Anmerkung: damit es nicht formatiert wird, habe ich Leerzeichen eingefügt. Diese könnt ihr beim Ausprobieren selbstverständlich auch weglassen...)
$Text = "Dies ist ein [ b ]einfacher[ /b ] Beispieltext";
echo $Text;
$Text = str_replace("[ b ]","<b>",$Text);
$Text = str_replace("[ /b ]","</b>",$Text);
echo $Text;
Wie ihr seht, muss beim Arbeiten mit bbCode jedes Tag entsprechend umgeformt werden, daher bietet sich die Auslagerung dieser Operationen in einer eigenen Funktion an. Dabei muss darauf geachtet werden, dass diese eigene Funktion über return auch einen Rückgabewert erzeugt!
(Für die, die es ganz genau nehmen: Ohne den Rückgabewert wäre es streng genommen nicht einmal eine Funktion, aber bei PHP ist man da normalerweise nicht so pingelig...)
mit dieser Funktion lassen sich so auch beispielsweise Zitateboxen formen.
In meinem Tutorial zur CSS-Formatierung der Zitateboxen (Link unten auf der Seite) habe ich erwähnt, welche Umwandlungszeichenfolge man benötigt.
So funktioniert das Beispielscript auf meiner Seite:
// oben wird ein Text in die entsprechende Variable gelesen
$Text = str_replace("","</div><br>",$Text);
Das Script erzeugt so um den Text einen div-Container, der dann über CSS formatiert wird, und fügt gleichzeitig das Stichwort "Zitat" ein.
Die Formatierung der Zitatebox findet ihr im entsprechenden Tutorial dazu (Link wie gesagt unten).
Neben der funktion str_replace bietet sich für bbCode-Arbeiten auch die Funktion eregi_replace an. Sie arbeitet genauso wie ereg_replace, mit dem einzigen Unterschied, dass eregi_replace die Groß- und Kleinschreibung ignoriert, was sich besonders bei Foren anbietet;
So können die Besucher beispielsweise sowohl ";
echo $Text;
$Text = eregi_replace ("(\[img\])(.*)(\[/img\])","<img src=' \\2 '>",$Text);
echo $Text;
wie ihr seht wird es hier schon etwas komplizierter, allerdings will ich versuchen es so einfach wie möglich zu erklären.
eregi_replace sucht mit Hilfe des Suchmusters nach einer Stelle im Text, an der diese Tags vorkommen:
duch die Zeichenfolge
<img src='bildpfad/dateiname.jpg'>
da keine angaben zu Höhe und Breite gemacht wurden, werden praktischerweise die Originalmaße der Datei übernommen.
Genauso funktioniert auch die Umwandlung von
[url]http://www.lima-city.de[url]
in einen anklickbaren Link. Man muss nur daran denken, den umgewandelten String entweder als Rückgabewert an eine Vairable zu liefern oder ihn direkt, z.B. über echo auszugeben.
Die Funktionsreferenzen von str_replace und eregi_replace findet ihr noch einmal hier:
http://www.selfphp.de/funktionsreferenz/string_funktionen/str_replace.php
http://www.selfphp.de/funktionsreferenz/regulaere_ausdruecke_posix/eregi_replace.php
Die Beispielscripts wurden auf meinem Webspace erfolgreich getestet.
zur Funktionsweise könnt ihr euch selbstverständlich das Forum auf Lima-City anschauen, ein weiteres Beispiel liegt auf meinem Space:
http://ssd_bonn.xardas.lima-ci....de/cms/index2.php?page=quotes
Das Tutorial mit den CSS-Befehlen für Zitateboxen gibts hier:
http://www.lima-city.de/tutorials.php?m=show&id=1560
Ich hoffe ich konnte mit diesem Tutorial einige offene Fragen beantworten.
Bedanken möchte ich mich an dieser Stelle ganz herzlich bei Kraeusi, der mir die Funktionsweise von ereg_replace in einem Thread sehr anschaulich dargelegt hat.
Bei Fragen zu diesem Tutorial gilt wie immer, schreibt mir eine PN oder nutzt das Profilgästebuch.
Gruß
ssd_bonn