seth_not@home: preg_match Bilder finden

Beitrag lesen

gudn tach!

ich nutze eine regex zum Filtern von Bildpfaden in HtmlTags

preg_match("@<img.*?src\s*=\s*'"['"].*?>@i",$inhalt,$pic);
[...]
Wenn diese Anführungszeichen (src=) fehlen, gehts nicht.
Bsp. <img scr=media/bild.jpg...

preg_match("@<img\s.*?src\s*=\s*(?:(['\"])(.*?)\1|([^ '\"]\S+?)).*?>@i", $inhalt, $pic);

so in etwa.
\1 ist eine "backreference" (siehe php-manual).

  1. (wäre noch besser) Frage : Kennt jemand eine Funktionen die Bilder
    insgesamt aus allen Texten, auch wenn sie nicht in einem hrml tag
    stehen rausfiltern kann ?

definiere "bild". ist das alles was auf ".jpg", ".png", ".gif" und ".svg" endet (das sind noch lange nicht alle)?

dann bastele einen ausdruck, der das sucht. also in etwa:
/\b(\S+.(?:jpg|png|gif|svg))\b/

der hat allerdings noch einige makel, wuerde z.b. auch
"img=irgendwas.jpg", aber nicht "../dings.jpg" matchen. also waere es besser, wenn du gleichheitszeichen ausschliessen koenntest und punkte am anfang zulaesst.

Jetzt das ganz gemeine der bildpfad ohne leerzeichen direkt
an diesem text:sonnenschein.jpg

heisst das bild "text:sonnenschein.jpg" oder "sonnenschein.jpg"?

falls doppelpunkte nicht vorkommen duerfen, kannst du entsprechend den ausdruck abaendern.

/((?:\bhttp://|.{0,2}/)?\b[^\s:=]+.(?:jpg|png|gif|svg))\b/

und auch da kann bestimmt noch irgendwas schiefgehen.
wichtig ist also, dass du dir zunaechst genau ueberlegst, welche formen von dateinamen vorkommen koennen.

prost
seth