bbcode das HTML a Tag mit Link erzeugen

son gohan

Erfahrenes Mitglied
Hallo,

ich habe folgende Lösung bisher um die BBCodes in HTML umzuwandeln:

PHP:
$beschreibung = $row['beschreibung'];
   $var = array(
                '[ F ]' => '<span style="font-weight:bold;">',
                '[ /F ]' => '</span>',
                '[ K ]' => '<span style="font-style:italic;">',
                '[ /K ]' => '</span>',
                '[ U ]' => '<span style="text-decoration:underline;">',
                '[ /U ]' => '</span>',
                '[ Z ]' => '<span style="font-size:18px;line-height:14px">?</span>',
                '[ /Z ]' => '<span style="font-size:18px;line-height:14px">?</span>',
                '[ URL ]' => '<a href=">',
                '[ /URL ]' => '"></a>',
               );
   $beschreibung2 = str_replace(array_keys($var), array_values($var), $beschreibung);

In der Variable $beschreibung2 ist nun der gefilterte Text mit HTML Tag. Ein Problem ist jetzt das HTML a Tag, der Link den der Benutzer zwischen geschrieben hat wird mit meiner Lösung nur im href="" Attribut eingetragen, aber er fehlt im eigentlichen <a></a> Tag, also zwischen den beiden a Tags muss ich jetzt noch mal den Link rein bekommen.

Weis jemand wie ich das hinbekommen kann?
 
Du gehst das leider viel zu einfach an. Denn durch deine Ersetzung erzeugst du schnell ein invalides Dokument, weil ein Start- oder Endtag fehlt. Der korrekte weg wäre über Reguläre Ausdrücke. Du kannst dann auch bestimmen, dass nur Tag-Paare bearbeitet werden.

Du hast dir bestimmt eine einfachere Lösung gewünscht, aber glaub mir, es schadet nicht sich mit Regulären Ausdrücken zu befassen. Ich habe vor etwa zwei Jahren das gleiche Problem wie du gehabt und habe mich etwas mit Regulären Ausdrücken befasst und meine BBCodes funktionieren jetzt.
 
Meinst du das nur für den Fall wo ich versuche das a Tag richtig hin zu bekommen, oder findest du auch das man die anderen BBCode wie Fette Schrift mit regulären Ausdrücken formatieren sollte?
 
Ich würde es überall verwenden. Hier mal ein Beispiel, wie du deine b-Tags ersetzt mit Hilfe eines Regulären Ausdrucks.

(Folgendes Stück PHP wurde von mir aus einem Stück meines C# Quelltextes erstellt. Ich bin nicht sicher ob es so korrekt ist.)
PHP:
$s = preg_replace('(\[F\])(.+)(\[\/F\])','<span style="font-weight:bold;">$2</span>',$s);

Das erste Argument von preg_replace ist der zu suchende Ausdruck. Gesucht werden ein oder beliebig viele Zeichen (.+), welche von und eingeschlossen sind.

Das zweite Argument ist die Ersetzung. Mit $2 kann ich den zweiten Ausdruck des ersten Parameters Rückreferenzieren. Mit Hilfe der Rückreferenzierung kannst du auch im Handumdrehen dein URL-Tag-Problem beheben.

Ich empfehle dir, den Wikipedia Artikel zu Regulären Ausdrücken mal durchzulesen.
 
Zuletzt bearbeitet:
Zurück