Regulärer Ausdruck um IMG-Tag zu entfernen
Andreas
- php
0 Dennis0 Andreas0 Christoph Zurnieden0 mbr0 MudGuard
2 Christian Kruse
0 Martin Hölter
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!!
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.
Hi Dennis!
Danke! Funktioniert perfekt!
Andreas
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
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
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
你好 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.
再见,
克里斯蒂安
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