Gå til innhold

Hente ut bilder fra tekst, og plassere dem i array


Anbefalte innlegg

Skrevet (endret)

Heisann.

 

Jeg ønsker å finne alle bilder i en string, og plassere dem i et array, hvor img-taggenes attributter blir keys i (sub-)arrayet. Noen som har en kodesnutt som fikser denne biffen? Src er eneste attributt jeg MÅ ha med, resten er bare et pluss.

 

Noe slikt som dette f.eks.

Array
(
   [0] => Array
       (
           [src] => bilde1.jpg
           [alt] => Alt.-tekst
           [width] =>300
           [style] => border: 1px solid #000;
       )

   [1] => Array
       (
           [src] => bilde2.jpg
       )

   [2] => Array
       (
           [src] => bilde3.jpg
           [alt] => Alt.-tekst
           [height] =>100
       )

)

Endret av remi sture
Videoannonse
Annonse
Gjest Slettet+142
Skrevet (endret)

preg_match() eller preg_match_all() er kanskje saken for deg...?

 

ellers kan du jo kanskje benytte deg av litt javascript, evt. ajax og php til den saken mener jeg.

Endret av Slettet+142
Skrevet (endret)
<?php

function imgTags2Array($input)
{
 $getTagsPattern = '/<img ([a-z]{2,5}=[\'|"][a-z\\.>< 0-9_-]*[\'|"] *)*>/';
 $getSettingsPattern = '/([a-zA-Z]{2,5})=[\'|"]([^"|\']*)[\'|"]/';

 preg_match_all($getTagsPattern,$input,$gotTags);
 
 foreach($gotTags[0] as $key => $tags)
 {
   preg_match_all($getSettingsPattern,$tags,$gotSettings);
   $imgTags[$key] = $gotSettings[0];
 }
 
 return($imgTags);
}

print_r(imgTags2Array('aslkdfjalskdjf<img src="asda.asd">askdalsk<img src="123" alt="as d">asdaskj'));

?>

Endret av grimjoey
Skrevet

Heisann.

 

Tusen takk for forslaget.

 

Dette ble nesten slik jeg vil ha det. Slik blir det nå:

Array

(

    [0] => Array

        (

            [0] => src="asda.asd"

        )

 

    [1] => Array

        (

            [0] => src="123"

            [1] => alt="as d"

        )

 

)

Mens slik vil jeg helst ha det:
Array

(

    [0] => Array

        (

            [src] => asda.asd

        )

 

    [1] => Array

        (

            [src] => 123

            [alt] => as d

        )

 

)

Er dette noe du klarer å fikse?
Skrevet (endret)

ikke noe problem ...

<?php

function imgTags2Array($input)
{
#  $getTagsPattern = '/<img ([a-z]{2,5}=[\'|"][a-z\\.>< 0-9_-]*[\'|"] *)*>/';

 $getTagsPattern = '/<img ([a-z]{2,5}=[\'|"]([a-z\\.><:;# 0-9_-]*)[\'|"] *)*>/';
 $getSettingsPattern = '/([a-zA-Z]{2,5})=[\'|"]([^"|\']*)[\'|"]/';

 preg_match_all($getTagsPattern,$input,$gotTags);
 
 foreach($gotTags[0] as $key => $tags)
 {
   preg_match_all($getSettingsPattern,$tags,$gotSettings);
   $imgTags[$key] = $gotSettings[2];
 }
 
 return($imgTags);
}

print_r(imgTags2Array('aslkdfjalskdjf<img src="asda.asd" style="border: 1px solid #000;">askdalsk<img src="123" alt="as d">asdaskj'));

?>

Endret av grimjoey
Gjest Slettet+142
Skrevet
I tillegg fungerer det ikke med XHTML-kode heller, altså med /> på slutten.

8416698[/snapback]

er vel bare å endre pattern-variablelen litt det?

$getTagsPattern = '/<img ([a-z]{2,5}=[\'|"]([a-z\\.><:;# 0-9_-]*)[\'|"] *)*(\/)>/';

Skrevet (endret)

<?php

function imgTags2Array($input)
{
 $getTagsPattern = '/<img ([a-z]{2,5}=[\'|"]([a-z\\.><:;# 0-9_-]*)[\'|"] *)*\/?>/';
 $getSettingsPattern = '/([a-zA-Z]{2,5})=[\'|"]([^"|\']*)[\'|"]/';

 preg_match_all($getTagsPattern,$input,$gotTags);
 
 foreach($gotTags[0] as $keyOne => $tags)
 {
   preg_match_all($getSettingsPattern,$tags,$gotSettings);

   $settings = $gotSettings[1];
   $values = $gotSettings[2];
   
   foreach($settings as $keyTwo => $setting)
   {
     $imgTagsFoo[$setting] = $values[$keyTwo];
   }

   $imgTags[$keyOne] = $imgTagsFoo;
 }

 return($imgTags);
}

print_r(imgTags2Array('aslkdfjalskdjf<img src="asda.asd" style="border: 1px solid #000;" />askdalsk<img src="123" alt="as d">asdaskj'));

?>

 

Returnerer:

 

Array
(
   [0] => Array
       (
           [src] => asda.asd
           [style] => border: 1px solid #000;
       )

   [1] => Array
       (
           [src] => 123
           [style] => border: 1px solid #000;
           [alt] => as d
       )

)

 

Det er med xhtml støtte

Endret av grimjoey
Skrevet

jada .. nå er det best at det ikke er mer feil.

 

<?php

function imgTags2Array($input)
{
 $getTagsPattern = '/<img ([a-z]{2,5}=[\'|"]([a-z\\.><:;# 0-9_-]*)[\'|"] *)*\/?>/';
 $getSettingsPattern = '/([a-zA-Z]{2,5})=[\'|"]([^"|\']*)[\'|"]/';

 preg_match_all($getTagsPattern,$input,$gotTags);
 
 foreach($gotTags[0] as $keyOne => $tags)
 {
   preg_match_all($getSettingsPattern,$tags,$gotSettings);

   $settings = $gotSettings[1];
   $values = $gotSettings[2];
   
   foreach($settings as $keyTwo => $setting)
   {
     $imgTagsFoo[$setting] = $values[$keyTwo];
   }

   $imgTags[$keyOne] = $imgTagsFoo;
   unset($imgTagsFoo);
 }

 return($imgTags);
}

print_r(imgTags2Array('aslkdfjalskdjf<img src="asda.asd" style="border: 1px solid #000;" />askdalsk<img src="123" alt="as d">asdaskj'));

?>

Skrevet (endret)

tegn som støttes <img src="her"> er forøvrig: " ,_,-,a-z,0-9,#,:,;,<,>"

 

trenger du fler så får du bare rope.

 

edit: hvis du vil bruke store bokstaver i style bytt ut a-z med a-zA-Z i $getTagsPattern

Endret av grimjoey
Gjest Slettet+142
Skrevet (endret)
tegn som støttes <img src="her"> er forøvrig: " ,_,-,a-z,0-9,#,:,;,<,>"

 

trenger du fler så får du bare rope.

er kanskje nok så nødvendig med DOT/punktum da.. :p

 

sry hvis du har det altså.. men jeg ekke så veldig pro i regex, så klarer ikke helt tolke det patternet ditt :/

Endret av Slettet+142
Skrevet

Du kan forresten lage en generisk funksjon ut av det som støtter flere tags.

 

bytt ut img med en variabel å la funksjonen passere den variabelen i tilleg til input

 

<?php

function parseTags($input, $tag = 'img')
{

$getTagsPattern = '/<'.$tag.' ([a-z]{2,5}=[\'|"]([a-z\\.><:;# 0-9_-]*)[\'|"] *)*\/?>/';

 ...

}

...

?>

Skrevet (endret)

Takk for oppgaven. Gav meg inspirasjon til å lære litt mer om regular expressions. Gav meg ideen til en parseML() funksjon som returnerer noe liknende:

 

Array
(
 [HTML] => Array
   (
     [_settings] => null
     [_content] => Array
       (
         [HEAD] => Array
           (
             [_settings] => null
             [_content] => Array
               (
                 [TITLE] => Array
                   (
                     [_settings] => null
                     [content] => Hjemmeside tittel
                   )
               )
           )
         [BODY] = > Array
           (
             [_settings] => Array
               (
                 [bgcolor] => #FFFFFF
                 [text] => #000000
               )
             [_content] => osv osv osv...
           )
       )
   )
)

 

Edit: Hva jeg skal med den vet jeg ikke så det blir nok en stund til jeg gidder å få den ferdig.

Endret av grimjoey

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...