Antworten auf deine Fragen:
Neues Thema erstellen

[PHP] Bilder nummerieren

MrManko

Nicht mehr ganz neu hier

Hi @ all.

Ich habe ein Problem, welches nicht so einfach zu erklären ist.

Ich habe in einem String mehrere IMG Tags, die wie folgt aufgebaut sein können.

HTML:
   <img src="bla.jpg" title="Blubb" alt="Moep" />
   <img src="bla.jpg" alt="Moep" title="Blubb" />
   <img src="bla.jpg" alt="Moep" />
   <img src="bla.jpg" title="Blubb" />

Ich habe ja bereits in diesem Forum einen Snippet bekommen, um die SRC aus beliebigen IMG Tags auszulesen. Es ist ja nun nicht das Problem diesen auf die TITLE Tags zu erweitern. Der Ausdruck ist für die Funktion preg_match_all():

PHP:
    preg_match_all("/<img.*?title=(\"|')(.*?)\\1.*?>/"....);

So, nun möchte ich aber nicht nur alle Title Tags finden, sondern, wenn eines gefunden wurde eine Zahl an das Ende dranhängen also um beim Bsp. zu blieben sollte der Title Tag so aussehen.

HTML:
   <img src="bla.jpg" alt="Moep" title="Blubb [1]" />

So und dann ist ja auch noch das Problem, wenn kein TITLE Attribut vorhanden ist. Dann müsste eines erstellt werden in dem einfach nur die Zahl drinsteht.

Ich benutze ein JavaScript, das aus dem Title Attribut automatisch eine Bildunterschrift bildet.

Ich brauche diese Funktion um automatisch Bildquellen am Ende eines Textes ausgeben zu können.

Ich habe echt keine Ahnung wie ich das ganze jetzt realisieren kann.....

Ich hoffe ihr könnt mir helfen.

LG

MrManko
 

Duffman15

Nicht mehr ganz neu hier

AW:
PHP:
 Bilder nummerieren[/b]

Wenn ich dich richtig verstehe, befindet sich der gesamte Code in einer Variable. Ich würde zunächst mal ein Array daraus erstellen und jedes Bild in ein eigenes Element stecken.

Und dann würde ich die titel-Attribute per preg_replace suchen und ersetzen.

Wenn du also das Array hast...
[code]
Array {
    [0] = <img src="bla.jpg" title="bla" alt="bla" />
    [1] = <img src="bla.jpg" title="bla" />
    [2] = <img src="bla.jpg"  alt="bla" title="bla" />
}
[/code]würde ich so weiter machen:
[php]
<?php

foreach($array as $num => $bild) {
     $array[$num] = preg_replace("title=\"(.*?)\"", "title=\"\\1[".$num."]\"", $bild);
}

?>
Ist alles untested, müsste aber so in etwa Funktionieren.

Liebe Grüße
Duffman
 

MrManko

Nicht mehr ganz neu hier

AW:
PHP:
 Bilder nummerieren[/b]

So wie ich das sehe wird dadurch zwar das title attribut in den einzelnen img tags ersetzt, aber dadurch habe ich die neuen img tags noch nicht im alten string wieder drinne. wie bewerkstellige ich denn das ? 

Bin dankbar für jede Hilfe

LG

MrManko
 

Duffman15

Nicht mehr ganz neu hier

AW:
PHP:
 Bilder nummerieren[/b]

Ähm, naja, die Array-Elemente aneinanderhängen...

[PHP]
<?php
foreach($array as $img) {
      $string .= $img; 
}
?>
 

MrManko

Nicht mehr ganz neu hier

AW:
PHP:
 Bilder nummerieren[/b]

Ich glaube wir reden gerade aneinander vorbei. In dem String sind nicht nur bilder vorhanden. Es kann genausogut text zwischen den Bildern sein, ich hoffe es ist nun klarer geworden was ich meine. Bei dem String handelt es sich nämlich um eine Usereingabe.

LG

MrManko
 

Duffman15

Nicht mehr ganz neu hier

AW:
PHP:
 Bilder nummerieren[/b]

Naja, wenn du geschickt explodest...
Angenommen du hast den String:

[code]
Ich gin mit meinem Hund <img src="bla.jpg" title="bla" alt="bla" /> und meiner Tante Lucy <img src="blabla.jpg" alt="blabla"  title="blabla" /> spazieren.
[/code]Explode es bei "/>", dann erhälst du dieses Array:

[code]
Array {
    [0] => Ich gin mit meinem Hund <img src="bla.jpg" title="bla" alt="bla" 
    [1] =>  und meiner Tante Lucy <img src="blabla.jpg" alt="blabla"  title="blabla" 
    [2] => spazieren.
}
[/code]Jetz per foreach und preg_replace ersetzen...

[php]
<?php
foreach($array as $num => $bild) {
    $array[$num] = preg_replace("title=\"(.*)\"", "title=\"\\1[".$num."]\"", $bild);
}
?>
und anschließend wieder zusammenfügen:
PHP:
<?php
$string = implode("/>", $array);
?>
Ist alles untested, sollte aber funktionieren :)
 
Zuletzt bearbeitet:

netbandit

Aktives Mitglied

AW:
PHP:
 Bilder nummerieren[/b]

Hier; vielleicht hilft es ja weiter:

[php]
<?
$string= '<img src="bla.jpg" title="Blubb" alt="Moep" />
         <img src="bla.jpg" alt="Moep" title="Blubb" />
         <img src="bla.jpg" alt="Moep" />
         <img src="bla.jpg" title="Blubb" />
         <img src="bla3.jpg">';

preg_match_all("/<img([^>]+)src=\"([^\"]+)\"([^>]+)?>/is", $string, $arrimg);

$img_tag=$arrimg[0];
$img_src=$arrimg[2];
$img_title_alt=$arrimg[3];

while(list($k,$html_tag)=each($img_tag)){
      unset($match);
      preg_match("/alt=\"([^\"]+)\"/is", $img_title_alt[$k], $match);
      $img_alt[$k]=trim($match[1]);
      unset($match);
      preg_match("/title=\"([^\"]+)\"/is", $img_title_alt[$k], $match);
      $img_title[$k]=trim($match[1]);
      // Testausgabe:
      echo htmlentities($html_tag). ' BILDQUELLE: ' . $img_src[$k] . ' ALT: ' . $img_alt[$k] . ' TITLE: ' . $img_title[$k] . "<br>\n";
}
?>
In der Testausgabe sind eigentlich alle benötigten Werte vorhanden; musst halt noch entscheiden/erweitern was passieren soll, wenn $img_alt und/oder $img_title leer sind, Beispiel:

PHP:
<?
$string= '<img src="bla.jpg" title="Blubb" alt="Moep" />
         <img src="bla.jpg" alt="Moep" title="Blubb" />
         <img src="bla.jpg" alt="Moep" />
         <img src="bla.jpg" title="Blubb" />
         <img src="bla3.jpg">';

unset($suchmuster);
unset($ersatz);

preg_match_all("/<img([^>]+)src=\"([^\"]+)\"([^>]+)?>/is", $string, $arrimg);

$img_tag=$arrimg[0];
$img_src=$arrimg[2];
$img_title_alt=$arrimg[3];

while(list($num,$html_tag)=each($img_tag)){
      unset($match);
      preg_match("/alt=\"([^\"]+)\"/is", $img_title_alt[$num], $match);
      $img_alt[$num]=trim($match[1]);
      unset($match);
      preg_match("/title=\"([^\"]+)\"/is", $img_title_alt[$num], $match);
      $img_title[$num]=trim($match[1]);

      // PRÜFEN OB ALT UND/ODER TITLE LEER SIND/IST
      if($img_alt[$num]==''){$img_alt[$num]=$img_title[$num];}
      if($img_title[$num]==''){$img_title[$num]=$img_alt[$num];}
      if($img_title[$num]==''){$img_alt[$num]='Bildnr. ' . ($num+1);$img_title[$num]='Bildnr. ' . ($num+1);}
      // SUCHMUSTER ...
      $suchmuster[$num]='/' . preg_quote( $html_tag,'/') . '/is';
      $ersatz[$num]='<img src="'  . $img_src[$num] . '" title="'  . $img_alt[$num] . '" alt="'  . $img_title[$num] . '" />';
      //... UND ERSATZ DEFINIEREN ...
}
// ... UM ES DANN HIER BEREINIGT AUSZUGEBEN:
if(isset($suchmuster) && isset($ersatz))
$string=preg_replace($suchmuster, $ersatz, $string);
echo $string;
?>
 
Zuletzt bearbeitet:

MrManko

Nicht mehr ganz neu hier

AW:
PHP:
 Bilder nummerieren[/b]

Okay, danke ihr zwei, ich werde mir jetzt beide Methoden einmal anschauen.

@Duffman15: Dein Snippet verstehe ich und kann es nachvollziehen.

@netbandit: Dein Snippet muss ich ersma untersuchen, dort sind mir viele Funktionen unbekannt, aber auch das werde ich ausprobieren.

LG

MrManko
 

MrManko

Nicht mehr ganz neu hier

AW:
PHP:
 Bilder nummerieren[/b]

@Duffman15

funktioniert super, wird jetzt noch ein wenig angepasst, aber vielen Dank, wieder was gelernt, ich sollte mich echt mehr mit Arrays beschäftigen.

LG

MrManko
 
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

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben