ugrás a tartalomhoz

Img tag kiegészítése width- és height- paraméterekkel

jadezoole.list · 2006. Szep. 11. (H), 12.43
Adott egy string változó, aminek vannak <img src="..."> tag-jei.
Azt szeretném, hogy ebbe a tag-be belekerüljenek a width="" és a height="" paraméterek is. Lehetőleg string vagdosással, mivel nincsen xml kezelő függvények a szerveren.
Megtaláltam a getimagesize() és az str_replace függvényt de nem tudtam összepakolni az algoritmust, mivel még mindig csak tanulom a php-t.
Egy további kérdés, hogy a getimagesize() csak az adott szerveren lévő képekre alkalmazható, vagy tudja a http://masszerver.com-ot is?
 
1

az említett függvények kifejtése php.net alapján

Táskai Zsolt · 2006. Szep. 11. (H), 13.10
http://hu.php.net/getimagesize megmondja, hogy fájlnevet vár, nem URL-t. ebből a második kérdésedre adott a válasz.

az elsőre:
str_replace (">", " width=\"".width."\" height=\"".height."\">");
vagy
str_replace ("/>", " width=\"".width."\" height=\"".height."\"/>");
attól függően, hogy XHTML-e. nem te rakod össze a stringet? mert akkor nem kéne replace...
2

kb. így

TeeCee · 2006. Szep. 11. (H), 13.24
De, még mielőtt a T. Kérdező megijed, hogy ez nem azt csinálja, felhívom a figyelmét, hogy ez MINDEN HTML-TAG lezáró kacsacsőrt lecserél. (gondolom csak gyors segítség volt a kód, annak tökéletes)
Ha egyben van a HTML-ed, akkor csöppet bonyolultabb cserét kell végrehajtani, akkor az eregi_replace, illetve a gyorsabb preg_replace függvényt kell alkalmazni.
Illetve érdekes lenne megfontolni egy olyat, hogy ezt minden oldalkiszolgáláskor elvégezni sztem megterhelő lehet a szervernek, de legalábbis teljesen fölösleges, szóval talán jó lenne kesselni is. (nyilván akkor, ha egy oldalt többször kiszolgálsz...)
3

ja igen, nyilván

Táskai Zsolt · 2006. Szep. 11. (H), 13.34
igen, jogos, köszi a kiegészítést, kizárólag a megadott string-re koncentráltam. persze jó lenne tudni, hogy mik a is körülmények. de jó kérdezőnek tűnt, biztos rájön ennyiből.
4

getimagesize()

jadezoole.list · 2006. Szep. 11. (H), 14.13
Kissé elszomorít,h nem ennyire okos a függvény.
Mivel a hivatkozás biztos, hogy 'http://' ezért gondolom akkor máshogy kell nekiállni.
Van erre vmi külön függvény, vagy le kellene hozzá szerverre tölteni az image-t, utóbbi esetben máshogy fogom megoldani a dolgot.
5

Ha az elejét

csla · 2006. Szep. 11. (H), 21.58
De ha az elejét cseréljük, akkor elég az str_replace is.

... = str_replace('<img','<img width="" height=""',...);
6

igen, ha mé gnincs benne ilyen...

TeeCee · 2006. Szep. 12. (K), 19.04
Igaz, és jogos felvetés. Ugyanakkor nem hiszem, hogy ilyen egyszerű lenne a dolog. Ugye, ha már szerepel egy width és height paraméter a html tag-ban, akkor ez nem túl célszerű. (Illetve egy ideje már ezek helyett inkább a style elembe kellene tenni a méreteket).
Persze a körülményeket nem tudjuk, még mindig...
7

Nem tudunk semmit :)

csla · 2006. Szep. 12. (K), 19.27
Én abból indultam ki, amit a kérdező írt, hogy jelenleg <img src="..."> formában vannak csak bent ezek a tagek. Persze amúgy bármi lehet, de ha ennyire fix a helyzet, akkor az elejét cserélni a legkönnyebb. Egyébként úgy gondolom - ami már itt fel is merült - hogy célszerűbb a string elkészítésekor "belenyúlni", nem utána cserélgetni.
9

az érték a lényeges

jadezoole.list · 2006. Szep. 13. (Sze), 13.12
Igazából nem is az a kérdés, hogy hogyan lehet az üres tageket beledobni, hanem maguk az értékek. Azzal semmit nem érek ha két üres attributumom van. Csak akkor hasznos ha az értékeket is belerakom.
8

reguláris kifejezés

Off- · 2006. Szep. 12. (K), 20.07
preg_match_all("/<img.*src=\"(.*)\".*\/>/mi", $miben_keres, $eredmeny, PREG_SET_ORDER);
az $eredmeny[n][0]-ban van tárolva az összes talált img tag, az $eredmeny[n][1]-ben pedig a gyüjtőzárójelben megadott minta eredménye található. Az az a kép elérési útja.

Csere:


$szoveg = $miben_keres;
for ($i=0;$i<count($eredmeny);$i++) {
  if (preg_match("/height=\"\d*\"/mi", $eredmeny[$i][0]))
    $uj_img = preg_replace("/height=\"\d*\"/mi", "", $eredmeny[$i][0]); //ha van height attributum, eltávolítjuk
  if (preg_match("/width=\"\d*\"/mi", $eredmeny[$i][0]))
    $uj_img = preg_replace("/width=\"\d*\"/mi", "width=\"x\" height=\"y\"", $nyers); //ha van width attributum lecseréljük
  else
    $uj_img = preg_replace("/ \/>/mi", " width=\"x\" height=\"y\" \/>", $eredmeny[$i][0]); //ha egyik sem volt, a végéhez illesszük
  $minta = "|".preg_quote($eredmeny[$i][0])."|";
  $szoveg = preg_replace($minta , $uj_img, $szoveg); //megkeressük az eredeti aktuális img cimkénket, és lecseréljük az ujra..
}

csak egy régebbi scriptemet írtam át ki, lehetnek bene hibák, de kiindulásnak jó lehet..

Minden jót!