/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
replace billede
Fra : Kasper Johansen


Dato : 16-10-02 14:14

Hejsa gruppe...
Jeg er ved at lave et nyheds-system hvor det er muligt at indsætte billeder
via JavaScript og PHP.
Det hele virker fint nok ved indsættelse af et enkelt billede, men ved to
fejler den i replace-kommandoen.

Problemet opstår idet at når der er indsættes et billede bliver der i
teksten tilføjet [IMG]billedenavn.jpg[/IMG]. Det erstatter jeg så via en
ereg_replace-kommando så det virker. Men hvis der er to billede laver den
den det helt forkert og laver et billede som kommer til at få en src'e efter
det første [IMG] i min tekst og det sidste [/IMG] i min tekst.

Det er jo ikke meningen.

Koden ser således ud, jeg er ikke så stært til replace-kommandoer så jeg har
fået den af en anden, men hvad er der galt med den??

$in_text = eregi_replace(
"\[IMG]([^*]+)\[/IMG]",
"<P><TABLE BORDER=0 WIDTH=100%><TR><TD WIDTH=100% ALIGN=center><IMG
CLASS='img_black' SRC='upload/pictures/" . "\\1" . "'
WIDTH=350px></TD></TR></TABLE><P>",
$d_gnew[text]
);


----
Mvh Kasper
www.cszone.h4f.dk
www.levithan.h4f.dk
www.cwain.h4f.dk



 
 
Jakob Møbjerg Nielse~ (16-10-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 16-10-02 16:04

Kasper Johansen wrote:
> $in_text = eregi_replace(

Prøv med:

> "\[IMG](.*?)\[/IMG]",

Hvis du ikke bruger ?-tegnet er dit regulære udtryk grådigt, og matcher
så meget som det overhovedet kan.

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Jakob Møbjerg Nielse~ (16-10-2002)
Kommentar
Fra : Jakob Møbjerg Nielse~


Dato : 16-10-02 16:25

Jakob Møbjerg Nielsen wrote:
> Hvis du ikke bruger ?-tegnet er dit regulære udtryk grådigt, og
> matcher så meget som det overhovedet kan.

Som Niels nævnte, kan ?-tegnet ikke bruges med ereg. Preg er også en
smule hurtigere, så der er intet tabt ved skiftet:

preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\"\\1\">", $text);

Note: Jeg bruger .*? i stedet for .+?, for at undgå følgerne for
følgende situation:

[img][/img] Og så et nyt [img]test.jpg[/img]

--
Jakob Møbjerg Nielsen | "Five exclamation marks, the
jakob@dataloger.dk | sure sign of an insane mind."
http://www.jakobnielsen.dk/ | -- Terry Pratchett, Reaper Man
Jeg søger et fuldtidsjob som programmør. Tag et kig på hjemmesiden.



Niels Andersen (16-10-2002)
Kommentar
Fra : Niels Andersen


Dato : 16-10-02 16:03

Kasper Johansen wrote in <3dad6612$0$22008$edfadb0f@dspool01.news.tele.dk>:
> Problemet opstår idet at når der er indsættes et billede bliver der i
> teksten tilføjet [IMG]billedenavn.jpg[/IMG]. Det erstatter jeg så via en
> ereg_replace-kommando så det virker. Men hvis der er to billede laver den
> den det helt forkert og laver et billede som kommer til at få en src'e
> efter det første [IMG] i min tekst og det sidste [/IMG] i min tekst.
>
> $in_text = eregi_replace(
> "\[IMG]([^*]+)\[/IMG]",

[^*] - det var en sjov én. :)
Jeg kan ikke lige forestille mig hvad det skulle gøre, ud over det samme som
bare et punktum. :)
Men nu er jeg heller ikke nogen regexp-ekspert.

Anyway, dit problem er plus-tegnet. Den er "greedy". Dvs. den tager så meget
med som overhovedet muligt.

du kan gøre sådan her:

"\[IMG]([^\[]+)\[/IMG]"

Så kan der ikke være "[" mellem [IMG] og [/IMG]

Alternativt kan man modificere "+" til at være non-greedy, men det kan så
vidt jeg husker ikke lade sig gøre med ereg.
Hvis du skifter til preg kan du modificere "+" til at være non-greedy ved at
indsætte et spørgsmålstegn bag efter, altså "+?".

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste