Andreas: Regulärer Ausdruck um IMG-Tag zu entfernen

Hallo,

für die Druckversion bestimmter Seiten muss ich alle Bilder (= <img ... >) aus einer Variable rausschmeissen, in der der HTML-Code zwischengespeichert ist. Dummerweise frisst der reguläre Ausdruck, den ich zusammengebastelt habe, anschließende Tags mit weg... ich komme nicht dahinter, was falsch ist! Vielleicht kann jemand helfen? Hab im Forum nix passend dazu gefunden.

Das ist der Befehl + Ausdruck, den ich verwende:

$content = eregi_replace('(<img [^<]*["|']?([^ "']*)["|']?[^>]>)','', $content);

Beispiel für die Anwendung:
$content vor eregi_replace:

<table border="0" cellpadding="0" cellspacing="0">
<tr><td><img src="pfad" height="1" width="10"></td>
<td><img src="pfad" height="1" width="180"></td>
<td><img src="pfad" height="1" width="220"></td></tr>

$content nach eregi_replace:
<table border="0" cellpadding="0" cellspacing="0"><tr><td>

Der Sinn von dem HTML-Code soll jetzt mal nicht interessieren, bitte ;-)

Schonmal Danke!!

  1. Hi Andreas,

    $content = eregi_replace('(<img [^<]*["|']?([^ "']*)["|']?[^>]>)','', $content);

    Warum so kompliziert? So sollte es ausreichen:

    $content = eregi_replace('<img [^>]*>', '', $content);

    Allerdings würde ich preg_replace verwenden:

    $content = preg_replace("/<img ([^>]*)>/", "", $content);

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    .htpasswd Datei mit PHP erzeugen
    Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)
    1. Hi Dennis!

      Danke! Funktioniert perfekt!

      Andreas

    2. Hi,

      $content = eregi_replace('(<img [^<]*["|']?([^ "']*)["|']?[^>]>)','', $content);

      Warum so kompliziert? So sollte es ausreichen:

      $content = eregi_replace('<img [^>]*>', '', $content);

      Allerdings würde ich preg_replace verwenden:

      $content = preg_replace("/<img ([^>]*)>/", "", $content);

      Bevor das tatsaechlich mal jemand im Archiv entdeckt: das funktioniert nur fuer spezielle Faelle, auch wenn das die meisten sind, aber ein '>' ist nunmal in den Attributwerten erlaubt, hier z.B. koennte er durchaus im alt-Text auftauchen. Die grundsaetzliche Idee des OP, sich am '<' aufzuhaengen, das garantiert den Anfang des naechsten Tags anzeigt (valides Markup vorausgesetzt) ist also durchaus nachvollziehbar.
      Es ist sogar die Frage, ob es sich ueberhaupt mit einem RegExp endlicher Groesse loesen laesst.

      so short

      Christoph Zurnieden

      1. Hallo Christoph

        Bevor das tatsaechlich mal jemand im Archiv entdeckt: das funktioniert nur fuer spezielle Faelle, auch wenn das die meisten sind, aber ein '>' ist nunmal in den Attributwerten erlaubt, hier z.B. koennte er durchaus im alt-Text auftauchen. Die grundsaetzliche Idee des OP, sich am '<' aufzuhaengen, das garantiert den Anfang des naechsten Tags anzeigt (valides Markup vorausgesetzt) ist also durchaus nachvollziehbar.

        Bloss mal ne Frage: das '<' könnte doch auch irgendwo im alt Text stehen, oder ist das verboten? Außerdem: wo hängt sich der OP denn am naechsten '<' auf? Ich meine: o.k. ich geb zu, ich habe die RegExp nicht wirklich verstanden ;-)

        liebe Grüße mbr

        1. Hi,

          Bloss mal ne Frage: das '<' könnte doch auch irgendwo im alt Text stehen, oder ist das verboten?

          Richtig. < darf nicht im Attributwert stehen. > darf es.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      2. 你好 Christoph,

        Es ist sogar die Frage, ob es sich ueberhaupt mit einem RegExp endlicher
        Groesse loesen laesst.

        Problemlos:

          
        $text = <<<HTML  
        <td><img src="abc"></td><td>fliesstext</td>  
        <td><img   ><img  /></td><td><img src=abc href="abc"></td>  
        <td><img src="abc" href=abc ></td><img src=abc href="abc" /></td>  
          
        <img src="abc"       >  
          
        <td><img src='abc'></td><td>fliesstext</td>  
        <td><img   ><img  /></td><td><img src=abc href='abc'></td>  
        <td><img src='abc' href='abc' ></td><img src=abc href='abc' /></td>  
          
        <img src='abc'       >  
          
        HTML;  
          
        echo preg_replace('~<img(?:[\s\w]+=(?:\w+|"[^"]+"|\'[^\']+\'))*\s*/?>~','',$text);  
        
        

        Vorraussetzung: es wird kein Single- oder Double-Quote weggelassen.

        再见,
         克里斯蒂安

        --
        Neue Hardware eingebaut | Der dritte mir bekannte Block-Nutzer
        Der Verstand ist der Hausherr, der Koerper sein Gast.
        http://wwwtech.de/
  2. Hi!

    Nur mal eie Frage: Warum setzt du nicht einfach per CSS die display-Eigenschaft auf none?

    Oder noch besser: keine Druckversion der Seite erstellen, sondern ein komplettes Drucklayout nutzen.

    Gruß aus Iserlohn

    Martin