David: Variabler String ersetzen?

Ich habe einen kurzen Text, in dem Verweise auf Bilder enthalten sind:

"Dies ist ein ganz kurzer Text und jetzt kommt folgendes Bild:
[img:bild.jpg;desc:Bilderbeschrieb] Und dann geht der Text weiter, bis ein weiteres Bild kommt: [img:bild2.jpg;desc:Bilderbeschrieb2]."

Wie kann ich das nun in <img src='bild.jpg' alt='Bilderbeschrieb'> ersetzen? Wäre dankbar für Hinweise. Habe es schon mit str_replace versucht, aber ging irgendwie  nicht, wegen der letzten eckigen Klammer "]" (die kann ja auch für sonstwas verwendet worden sein).

$text=str_replace("[img:]","<img src='",$text);
$text=str_replace(";desc:"," alt='",$text);
$text=str_replace("]","'>",$text);

Besser wäre für mich jedoch, wenn ich die beiden Werte in zwei Variable speichern kann, damit ich z.B. die Beschreibung auch vor oder Nach dem Bild ausgeben kann und nicht bloss als "alt-Tag".

Beschreibung 1:<br>
<img src='bild.jpg'>

Wie geht das bloss?

Vielen Dank

  1. Moin!

    $text=str_replace("[img:]","<img src='",$text);
    $text=str_replace(";desc:"," alt='",$text);
    $text=str_replace("]","'>",$text);

    Bei einem "Regulären Ausdruck"  (regular expression) haben einige Zeichen besondere Bedeutungen. Dieses sind:

    []?.^$|*+{}()

    Diese Zeichen musst Du maskieren wenn Du nach ihnen suchst. Dies geschieht mit einem Backslash.

    Also:

    $text=str_replace("\[img:\]","<img src='",$text);  
    $text=str_replace(";desc:"," alt='",$text);  
    $text=str_replace("\]","'>",$text);
    

    Lesestoff: http://www.regular-expressions.info/reference.html

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
    1. Moin!

      Also:

      $text=str_replace("[img:]","<img src='",$text);

      $text=str_replace(";desc:"," alt='",$text);
      $text=str_replace("]","'>",$text);

        
      Noch besser (performanter) ist es, wenn Du mit Array arbeitest:  
        
      ~~~php
      $arSearch  = array("\[img:\]", ";desc:", "\]");  
      $arReplace = array("<img src='", " alt='", "'>");  
      $text=str_replace($search, $replace, $text);
      

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix®

      --
      Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development
      1. Hallo nochmals,

        also deine Antwort verstehe ich nun nicht ganz. str_replace() braucht überhaupt keine regulären Ausdrücke.

        $text="[a]";
        $text=str_replace("[a]","[b]",$text);   gibt "[b]" aus und somit geht das auch ohne Backslashes problemlos.

        Ich wollte - vereinfacht gesagt - wissen, wie man den Text

        "Hier kommt ein Bild [img:bild2.jpg;desc:Bildbeschreibung]. Hier geht der Text weiter"

        In eine solche Form bekommt?

        "Bildbeschreibung:
        <img src='bild.jpg'>"

        Ich hoffe, man kann das nachvollziehen.

        1. »» Hallo nochmals,

          »» Ich wollte - vereinfacht gesagt - wissen, wie man den Text
          »»
          »» "Hier kommt ein Bild [img:bild2.jpg;desc:Bildbeschreibung]. Hier geht der Text weiter"
          »»
          »» In eine solche Form bekommt?
          »»
          »» "Bildbeschreibung:
          »» <img src='bild.jpg'>"

          Ach so... Mit einem preg_replace — Sucht und ersetzt einen regulären Ausdruck
          http://de.php.net/manual/de/function.preg-replace.php

          <?php  
            
          $text='Es folgt ein bild [img:bild2.jpg;desc:Bildbeschreibung].  
          Das war ein Bild. Jetzt kommt noch eines: [img:bild3.gif;desc:Das Bild wird beschrieben].';  
            
          $search='/\[img:(.*);desc:(.*)\]/';  
            
          $replace='<img src="$1" alt="$2" title="$2" />';  
            
          echo preg_replace($search, $replace, $text);  
            
          ?>
          

          [x] getestet.

          MffG fastix