Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „<img> tags per php auslesen und mit <a> umschließen“

Philipp88

Nicht mehr ganz neu hier

Hallo und guten Abend,

ich habe in meiner Datenbank Texte in folgender Html- Struktur stehen:
HTML:
<p>blablabla<br>bla<img src="pfad_zum_bild" style="css_styles" width="..." height="..." title="..." />
Text geht weiter<br>blabla[<img src="pfad_zum_bild" style="css_styles" width="..." height="..." title="..." /> bla<br>
blabla</p>

Nun soll jedes Bild per Lightbox vergrößert werden.

Dazu muss jedes <img>- Tag mit ein <a> Tag umschlossen werden, wie:
HTML:
<a href="pfad_zum_bild" rel="lightbox">Bild</a>

Ich habe die Vermutung, dass die Lösung preg_match() ist, Leider weiß ich den Regulären Ausdruck nicht um dieses zu realisieren:'(

Könnt ihr mir bitte helfen?

Danke im voraus
Philipp
 

DarkFather

Nicht mehr ganz neu hier

AW: <img> tags per php auslesen und mit <a> umschließen

PHP:
preg_match_all("/<img.*src=\"([a-z0-9-_.]*)\".*\/>/i", $text, $matches);
 

hub

nicht ganz neu hier

AW: <img> tags per php auslesen und mit <a> umschließen

Moin moin,
regular expressions sind ein durchaus spannendes Thema. Wenn du selber testen und/oder optimieren willst, ist das eins von vielen ( mein Lieblingsspielzeug ): http://www.weitz.de/regex-coach/ .

Gruss Ulli
 

Philipp88

Nicht mehr ganz neu hier

AW: <img> tags per php auslesen und mit <a> umschließen

danke es klappt.
Jetzt steh ich vor einem neuen problem:
in der datenbank gibt es noch alte a- tags,die ungefähr eine struktur haben,wie:
HTML:
<a href="alter_pfad_zum_bild" rel="lightbox" class="box"><img src="pfad_zum_bild" /></a>

jetzt muss ich die links in der datenbank entfernen.ich möchte dies auch mit preg_match lösen.

mein gedachter code ist:
PHP:
preg_match_all("/<a.*rel=\"lightbox\".*\ >([a-z0-9\/-_.]*).*<\/a>/i", $article, $matches);
aber leider ist das array $matches leer:(

könnt ihr mir helfen?

gruß philipp
 

DarkFather

Nicht mehr ganz neu hier

AW: <img> tags per php auslesen und mit <a> umschließen

PHP:
preg_match_all("/<a.*?rel=\"lightbox\".*?>(<img.*?)<\/a>/i", $text, $matches);

Kurz erklärt: Das ? ist hier sehr wichtig. Es kehrt die Gier um, setzt also das Suchmuster auf ungreedy (geht auch für die ganze Suche indem du neben dem /i noch ein U setzt, also /iU (großes U, ein kleines bewirkt ganz was anderes!).

Geht bei der ersten Variante auch:
PHP:
preg_match_all("/<img.*?src=\"(.*?)\".*?\/>/i", $text, $matches);
 

Philipp88

Nicht mehr ganz neu hier

AW: <img> tags per php auslesen und mit <a> umschließen

Hallo ich nochmal :)

Leider werden manche bilder in meinen preg_match nicht erkannt und das a- tag werden um zwei imgs gelegt:(

HTML:
<img src="..." border="0" alt="..." title="..." hspace="5" vspace="5" width="217" height="154" align="left" /> <img src="..." border="0" alt="..." title="..." hspace="5" vspace="5" width="217" height="153" align="left" />

leider werden die Bilder als eines erkannt und nur ein a- tag werden um beide gelegt:(

PHP:
$pattern = '/<img.*src=\"([a-z0-9\/-_.]*)\".*\/>/';
      $replace = '<a href="${1}" rel="lightbox">${0}</a>';
    #  $article = preg_replace($pattern, $replace, $article);
      preg_match_all($pattern, $article, $match);
      print_r($match);

wisst ihr wo der Fehler ist?
Bin schon am verzweifeln:(

Philipp
 

Philipp88

Nicht mehr ganz neu hier

AW: <img> tags per php auslesen und mit <a> umschließen

Vielen Dank hat wunderbar funktioniert:)

Jetzt muss der Code noch ein bisschen manupuliert werden. Es soll ein anderes Bild verlinkt werden.
Dazu habe ich folgenden Code geschrieben:
PHP:
$pattern = '/<img.*src=\"([a-z0-9\/-_.]*)\".* alt=\"(.*)"\ .*\/>/iU';
      
      #$article = preg_replace($pattern, $replace, $article);
      preg_match_all($pattern, $article, $match);
     
     $num = count($match[0]);
     
     for($i = 0; $i <= $num; $i++) {
       $pos = strrpos($match[1][$i], ".");
       $img_cut = substr($match[1][$i], 0, $pos);
       $img_cut2 = substr($match[1][$i], $pos);
       
       if(strpos($img_cut, "_300")) {
       $big = str_replace("_300", "", $img_cut);
       } elseif(strpos($img_cut, "_k")) {
       $big = str_replace("_k", "_g", $img_cut);
       } else {
         $big = $img_cut;
       }
       
       $img_big = $big . $img_cut2;
       
       ### prüfen ob file existiert, sonst original ###
       
       if(!file_exists($img_big)) {
         $img_big = $img_cut . $img_cut2;
       }
       
       $replace = '<a href="' . $img_big . '" rel="lightbox" title="' . $match[2][$i] . '">' .$match[0][$i] . '</a>';
       $article = str_replace($match[0][$i], $replace, $article);
     }

funktioniert eigentlich auch perfekt, nur kommt manchmal ein Bild doppelt in meinem Text vor, sodass str_replace zweimal auf die selbe Zeichenkette zugreift. Zufolge hat dies, dass das Bild zwei a- tags bekommt und die lightbox mehrere gleiche Bilder angezeigt :(

Gibt es da eine Lösung das replace nur an der gefunden Position ersetzt?
 

Philipp88

Nicht mehr ganz neu hier

AW: <img> tags per php auslesen und mit <a> umschließen

hi :)

da ich bis jetzt keine richtige Lösung dafür gefunden habe, möchte ich jetzt einfach zum schluß die ganzen leeren a- tags rauslöschen vor der Ausgabe.

Dazu habe ich mir ein regulären Ausdruck geschrieben:

PHP:
"/<a .* rel=\"lightbox\" .*\><\/a>/Ui";

Leider findet er alle a- Tags auch mit Inhalt :( Warum findet er alle und nicht nur die ohne Inhalt?

Für Hilfe wäre ich sehr dankbar.

Philipp
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.189
Beiträge
2.582.077
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben