remi sture Skrevet 17. april 2007 Skrevet 17. april 2007 (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 17. april 2007 av remi sture
Gjest Slettet+142 Skrevet 18. april 2007 Skrevet 18. april 2007 (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 18. april 2007 av Slettet+142
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 (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 18. april 2007 av grimjoey
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 har ikke tatt høyde for : og # hvis du skal definere style. revidert utgave kommer
remi sture Skrevet 18. april 2007 Forfatter Skrevet 18. april 2007 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?
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 (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 18. april 2007 av grimjoey
remi sture Skrevet 18. april 2007 Forfatter Skrevet 18. april 2007 I tillegg fungerer det ikke med XHTML-kode heller, altså med /> på slutten.
Gjest Slettet+142 Skrevet 18. april 2007 Skrevet 18. april 2007 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_-]*)[\'|"] *)*(\/)>/';
remi sture Skrevet 18. april 2007 Forfatter Skrevet 18. april 2007 Bør vel fungere både med og uten /, ikke bare med. Er du med?
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 (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 18. april 2007 av grimjoey
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 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')); ?>
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 (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 18. april 2007 av grimjoey
Gjest Slettet+142 Skrevet 18. april 2007 Skrevet 18. april 2007 (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.. sry hvis du har det altså.. men jeg ekke så veldig pro i regex, så klarer ikke helt tolke det patternet ditt :/ Endret 18. april 2007 av Slettet+142
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 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_-]*)[\'|"] *)*\/?>/'; ... } ... ?>
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 har med punktum ja. glemte å nevne det. litt vanskelig med filnavn hvis jeg ikke hadde hatt det. bra observasjon uansett.
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 den generiske funksjonen bruker forøverig img som default tag hvis du kun spesifiserer 1 argument til funksjonen
remi sture Skrevet 18. april 2007 Forfatter Skrevet 18. april 2007 Glimrende, tusen takk skal du ha. Veldig bra jobbet.
grimjoey Skrevet 18. april 2007 Skrevet 18. april 2007 (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 18. april 2007 av grimjoey
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå