DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Sva početnička pitanja (http://www.devprotalk.com/forumdisplay.php?f=40)
-   -   preg_replace problem :) krajnje cudno (http://www.devprotalk.com/showthread.php?t=7966)

flash_back 16. 10. 2009. 01:14

preg_replace problem :) krajnje cudno
 
pozdrav drugari, long time no see :)

imam jedan problemcic, mislio sam da sam ga resio naime pojavio se bug.. evo o cemu se zapravo radi..

kod za hvatanje [img] taga na mom www.tuningtube.rs forumu (inace forum lici na phpBB3, ugledao sam se na njihov HTML i layout ali je engine R u potpunosti) je do malo pre izgledao ovako:

Kôd:

$pretraga[7] = '/\[img\](.*)\[\/img\]/iU';
$zamena[7] = '<img src="$1" />';

obicno hvatanje i preg_replace koji kreira <img> tag.. resio sam da malo to unapredim, ljudi ubacuju ponekad povece slike i to ume lose da izgleda kada ispada van okvira foruma.. evo prva stvar koja me je zbunila da ne kazem zgranula:

Kôd:

$pretraga[7] = '/\[img\](.*)\[\/img\]/iU';
$slika = '$1'; // radi, vraca url slike

list($width, $height, $type, $attr) = @getimagesize($slika); // ne radi, ne mogu nikako da prenesem sliku, vraca uvek blank string..

dalje, onda sam pokusao odmah da je izvadim :) posto ovo nije uspelo, rekoh da probam ponovo da udarim preg_replace, pre glavnog.. uspelo je ali delimicno :D

Kôd:

// slika
$pretraga[7] = '/\[img\](.*)\[\/img\]/iU';
$slika = preg_replace($pretraga[7], '$1', $neki_tekst);
               
list($width, $height, $type, $attr) = @getimagesize($slika);
if ($width > 600):
        $zamena[7] = '<a href="$1" target="_blank"><img src="$1" width="600" /></a>';
else:
        $zamena[7] = '<img src="$1" />';
endif;

^ sta je ovde zanimljivo? zanimljivo je to da script uhvati ceo tekst za sliku, kako nemam pojma :D

znaci da pojasnim, ceo $neki_tekst se prenese u @getimagesize($slika) funkciju umesto cistog url-a slike, kao da prag_replace ne postoji..

inace pre nekih nedelju dana sam bio na jednom razgovoru za stalan posao, jedna stvar koju su mi rekli je da kad imam neki problem ne cutim 3 dana i 4-ti kazem zaglavio sam se ;) tako da imam problem, guglao sam 30min bez uspeha i pokusavao razne varijante ali nista nije urodilo plodom.. i gde cu nego na DPT :)

mileusna 16. 10. 2009. 01:29

Zbunjuješ sa ovim getimagesize i sl. Znači napiši lepo primer kako izgleda string na ulazu, kako izgleda pattern i šta dobiješ na izlazu, odnosno šta očekuješ da dobiješ na izlazu pa da vidimo... Vako ništa ne mogu da ti kažem kad ne znam kako izgleda $neki_tekst.

flash_back 16. 10. 2009. 01:38

krajnji preg_replace je:

Kôd:

return preg_replace($pretraga, $zamena, str_replace("\n", "<br />", str_replace("\r\n", "<br />", $this->Generisanje_Smajlija(auto_link($this->validacija->vrati_tekst_za_formu($tekst), 'url', TRUE)))));
ali to sumljam da je pomoglo :D

ocekujem da iz posta foruma elte u postu $neki_tekst tipa:

Kôd:

dugo nisam bio na DPT-u [ img ]http://images.businessweek.com/ss/06/07/top_brands/image/bmw.jpg[/img] drago mi je da brzo reaugujete ;))
izvucem samo url slike koji mogu dalje da procesuiram i uhvatim njegove osnovne parametre kao sto su visina i sirina i ako su veci od nekog limita (recimo 600px za sirinu) da ogranicim sliku u samom postu na 600px sirine i linkujem je u novom prozoru na istu pune velicine ;)

flash_back 16. 10. 2009. 01:40

problem je u tome sto se kroz preg_replace provuce (u zadnjem primeru) ceo text, ne ociscen i tako upada u getimagesize funkciju..

edit: mislim na zadnji primer prvog posta :)

flash_back 16. 10. 2009. 01:53

i nemoj da vas buni u krajnjem preg-u $this->validacija->vrati_tekst_za_formu($txt); :)

to sluzi da ocisti post od HTML elemenata i da se na rollover teme ili ikonice zadnjeg posta prikaze sadrzaj ;) evo kako izgleda, pogledajte // http://www.tuningtube.rs/forum.html

mileusna 16. 10. 2009. 02:00

Citat:

Kôd:

DPT-u [ img ]http://images.businessweek.com/ss/06/07/top_brands/image/bmw.jpg[/img]

Ček, jel postoje ovi spejsovi kod [ img ]?!

flash_back 16. 10. 2009. 02:04

ma jok, to sam ovde ubacio jer je ispisao sliku u kodu kada je ok img tag ;) a nixa prebacio ovde temu i boli ga k.. da pomogne drugaru :( pa bre druze nebi ni kacio temu da je nesto simple - pocetnicko :) znas me valjda ;)

flash_back 16. 10. 2009. 02:05

@mileusna: hvala na pomoci, valjda cemo do veceras da resimo stvar :)

mileusna 16. 10. 2009. 02:12

Ja te batice ne kontam:

Kôd:

$in = 'test [img ]http://images.businessweek.com/ss/06/07/top_brands/image/bmw.jpg[/img] test';
$out = preg_replace('/\[img\](.*)\[\/img\]/iU', '<img src="$1"/>', $in);
echo $out;

// ovo daje
// test <img src="http://images.businessweek.com/ss/06/07/top_brands/image/bmw.jpg"/> test

Koji je tu problem?!

flash_back 16. 10. 2009. 02:24

^ tako je, sve je to ok, takav je i bio kod, to je i prvi primer prvog posta i to radi ok, tu nema spornih detalja :) a sada probaj da samo sliku ubacis u getimagesize() funkciju? da izvucem parametre za sirinu i ako su veci od npr: 600px da zamena za preg bude <a href="$1" target="_blank"><img src="$1" width="600" /></a>?

ne znam dali si me razumeo sta ja pokusavam da uradim ovde? cista glupost ali neverovatno, u drugom primeru prvog posta mogu da izvadim URL u string ali ne mogu da ga prosledim u getimagesize() funkciju? zvuci smesno ali je tako :)

dalje, u trecem primeru prvog posta, prag_replace ne cisti uneti post/string, vec ga celog prosledjuje dalje u getimagesize() funkciju.. o tome ja pricam, nadam se da sam sada malo pojasnio :)

@nixa, sto obrisao onaj post, stvarno sam u pravu, prebacio si temu u pocetnicka pitanja, stvar je naizgled simple ali u opste nije ;) da se ponovim, kad mozes da prebacis temu mozes onda sigurno i da resis zagonetku genije :D da te vidimo :)

flash_back 16. 10. 2009. 02:30

Citat:

Originalno napisao mileusna (Napišite 74112)
Ja te batice ne kontam:

Kôd:

$in = 'test [img ]http://images.businessweek.com/ss/06/07/top_brands/image/bmw.jpg[/img] test';
$out = preg_replace('/\[img\](.*)\[\/img\]/iU', '<img src="$1"/>', $in);
echo $out;

// ovo daje
// test <img src="http://images.businessweek.com/ss/06/07/top_brands/image/bmw.jpg"/> test

Koji je tu problem?!

cek, nismo se razumeli izgleda :lost:

sad cu za min :)

mileusna 16. 10. 2009. 02:33

Tema je na pravom mestu. :)


Kôd:

$pretraga[7] = '/\[img\](.*)\[\/img\]/iU';
$slika = preg_replace($pretraga[7], '$1', $neki_tekst);
               
list($width, $height, $type, $attr) = @getimagesize($slika);

Ti posle preg_replace ne dobiješ URL u promenljivoj $slika već ceo tekst gde je [img]url[/img] zamenjeno samim URL-om, ali ceo tekst i dalje ostaje. Nakon toga, logično je da kad taj string pošalješ na getimagesize ne dobiješ ništa jer nisi poslao validan url/filename?!

bluesman 16. 10. 2009. 02:35

Ako sam ja dobro razumeo tebi nije problem regular expression, tebi je frka sa getimagesize?

Ako je to, treba da znaš da neke slike ne sadrže "size information", da li si probao sa različitim slikama ili drljaš jednu za probu pa kao ne radi? Funkcija vraća false ako ne može da pronađe info ili file ne postoji.

flash_back 16. 10. 2009. 02:37

moja greska druze, eto sta se desi kada radis po 24h kao masina :(

totalno sam se prebacio, ne znam sta mi bi :) ja sam pomislio da pattern cisti ceo string i vraca samo URL :1046: my bad :1083:

nego vec sam umoran, jer mogu da te zamolim oko patterna, umesto trenutnog koji vraca string sa URL-om ('/\[img\](.*)\[\/img\]/iU') da vrati samo url, ociscen string? ajde molim te ako te ne mrzi, vec sam umoran, vidis i sam sta se desava kada preceras :D

TNX ;)

mileusna 16. 10. 2009. 02:37

@bluesman Problem je što preg_replace koristi pogrešno. :) Taj string koji prosledi na getimagesize() nije URL već tekst celog posta, i logično je da dobije trubu od getimagesize()

@flash_back Pattern je dobar, ali koristiš pogrešnu funkciju, tebi ne treba preg_replace u tom delu jer ništa ne "riplesuješ", već preg_match da izvučeš URL-ove.

bluesman 16. 10. 2009. 02:38

Off Topic: Moraćemo da napravimo neki template za postavljanje pitanja

mileusna 16. 10. 2009. 02:44

Off Topic: I dobismo novu temu od 15 poruka... Eto zašto našoj civilizaciji preti information overload :)

flash_back 16. 10. 2009. 02:44

Citat:

Originalno napisao bluesman (Napišite 74116)
Ako sam ja dobro razumeo tebi nije problem regular expression, tebi je frka sa getimagesize?

Ako je to, treba da znaš da neke slike ne sadrže "size information", da li si probao sa različitim slikama ili drljaš jednu za probu pa kao ne radi? Funkcija vraća false ako ne može da pronađe info ili file ne postoji.

da da :) evo malo pre sam posumljao za minut u sebe :1046: dobar je onaj kod, ja samo vadim URL iz njega i prosledjujem ga u getimagesize() funkciju :D dugo radim pa sam nesto umislio da nisam dobro postavio upit :1038: ne mojte duze od 8h da radite, nije dobro za zdravlje :D

da, probao sam sa razlicitim slikama razlicitih dimenzija.. problem je konkretno jer funkcija jednostavno propusti ceo string post, uopste ga ne ocisti :(

Kôd:

$pretraga[7] = '/\[img\](.*)\[\/img\]/iU';

$slika = preg_replace($pretraga[7], '$1', $tekst);
               
list($width, $height, $type, $attr) = getimagesize($slika);

$slika se vrati kao cela funkcija... izvinite, toliko sam za kompom da zadnjih sat vremena ne znam vise sta radim :)

flash_back 16. 10. 2009. 02:46

Citat:

Originalno napisao mileusna (Napišite 74118)
@bluesman Problem je što preg_replace koristi pogrešno. :) Taj string koji prosledi na getimagesize() nije URL već tekst celog posta, i logično je da dobije trubu od getimagesize()

@flash_back Pattern je dobar, ali koristiš pogrešnu funkciju, tebi ne treba preg_replace u tom delu jer ništa ne "riplesuješ", već preg_match da izvučeš URL-ove.

daj baci to molim te da mi skratis muke :) ako nastavim ovako moracu malo kod psihica, cisto onako informativno da vidim sta radi :D

flash_back 16. 10. 2009. 03:04

..i? meni je blokirao mozak :D evo, ravno skoro 24h za kompom ;) ako mozete bacite taj kod, ako ne izmozgacu ga sutra kad ustanem :)

hvala svima na pomoci :)

bOkIcA 16. 10. 2009. 03:23

Mozda ovako nesto trazis.

PHP kôd:

$tekst "fds dsf [img]http://www.google.com/images/nav_logo7.png[/img] dsf
dfs [img]http://www.google.com/images/nav_logo2.png[/img] dfsdf ds
dfs sdsadas[img]http://www.google.com/images/nav_logo3.png[/img] dfsdf ds"
;

if (
preg_match_all("/\[img\](.*)\[\/img\]/i"$tekst$slike)) {
    
print_r($slike[1]);



flash_back 16. 10. 2009. 18:03

hvala druze :) evo sad sam ustao, nisam spavao juce oko 24h i efektivno radio pa je mozak poceo da blokira :D

tnx jos jednom :)

flash_back 20. 10. 2009. 01:35

evo i koda ako nekome zatreba, da se ne muci ;)

PHP kôd:

        // slika
        
if (preg_match_all('/\[img\](.*)\[\/img\]/iU'$tekst$slike)) {
            
$pretraga[7] = '/\[img\](.*)\[\/img\]/iU';
            foreach(
$slike[1] as $slika) {        
                list(
$sirina$visina$tip$atributi) = @getimagesize($slika);
                if (
$sirina 600):
                    
$zamena[7] = '<a href="$1" target="_blank"><img src="$1" width="600" /></a>';
                else:
                    
$zamena[7] = '<img src="$1" />';
                endif;
            }
        } 


flash_back 01. 03. 2010. 23:56

e slucajno sam naleteo na temu ponovo posle dosta vremena.. ne bitno, moram da samo javim jer ima problema oko izvrsavanja.. konkreno, ovo o cemu smo pricali uradio sam za funkciju Reinkarnacija_Teksta() koja ima ukupno za sada 11 zamena, dakle ovo je samo 1 od njih..

kod je u redu kada treba par slicica da se sredi, ali kada ima stvarno puno slika dolazi do tako reci "pucanja koda" :D kod toliko usporava funkciju da je to jednostavno ne verovatno, nemojte slucajno da ga primenjujete kada ima vise slika jer jednostavno mnogo usporava konkretnu funkciju da se ili strana ucitava mnogo dugo ili jednostavno vrati 500 server internal error :D

dakle samo da javim, implementacija ovoga je samo znaci moguca ako ima par slicica, u kontekstu u kome sam ga ja koristio, u funkciji za "reinkarnaciju" koda iz baze gde je broj slika ne izvesan kod ne sme da se primeni nikako ;) imam resenje da se preko JS-a resizuje slika nakon ucitavanja, ako nekome treba kod neka me kontaktira na PP :)


Vreme je GMT +2. Trenutno vreme je 13:58.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.