marco: Problem mit ereg_replace

Hallo allerseits,

Ich bin gerade dran ein eigenes Forum in PHP zu schreiben. Dabei braucht es natürlich auch eine Möglichkeit Bilder einzufügen, ohne dass HTML aktiviert ist. Ich habe dieses Problem nun auf folgende Art gelöst. Der User muss die URL zum Bild folgendermassen darstellen: [img]url[/img]. Mit Hilfe des Ausdrucks
$inhalt = ereg_replace("([img])(.*)([/img])","<img alt="Bild eines Users" src="\2">",$inhalt);
wird dann dies ausgegeben: <img alt="Bild eines Users" src="url">

Dies ist alles noch in Ordnung. Problematisch wird es erst, wenn der User zwei Bilder einfügt, also so: [img]url[/img][img]url[/img] .
Dann kommt nämlich folgendes heraus:
<img alt="Bild eines Users" src="url[/img][img]url"> .

Wie kann ich erreichen, dass alle [img]- und [/img]-Tags korrekt ersetzt werden?

Vielen Dank schon im Voraus.

Grüsse,
Marco

  1. Hallo marco,

    Wie kann ich erreichen, dass alle [img]- und [/img]-Tags korrekt ersetzt werden?

    Mit ereg gar nicht, das unterstützt nämlich keine Ungreedy-Modifier. (Ok, man könnte nach [[1] suchen, bei Bildern dürfte das auch noch gut gehen, allerdings wird das spätestens bei Fett, Kursiv, etc. fehlschlagen.)

    Mit preg_replace mit folgendem Ausdruck: ![img](.*?)[/img]! oder alternativ ![img](.*)[/img]!U, siehe auch http://www.php-faq.de/q/q-regexp-gierig.html

    Viele Grüße,
    Christian


    1. ↩︎

    1. Vielen Dank Christian,

      Jetzt funktioniert es. Ich kannte die funktion preg_replace() gar nicht. Aber jetzt geht alles einfacher.

      Gruss
      Marco