/ 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
Markering af ord i html - uden at pille ve~
Fra : Niels Andersen


Dato : 28-10-01 10:10

Det er lidt en sjov situation jeg stå i her. :)

Jeg skal markere nogle ord i en tekst. Men teksten er allerede
html-ificeret, og en generel søg-og-erstat vil også pille ved
html-tagsene. Og det er jo ikke godt.

Jeg bruger nu noget i stil med dette:
preg_replace("/\b($word)\b/i", '<span class="mark">\1</span>', $html)

Men hvis ordet nu fx. står i en url i et a-tag, så går det jo helt galt.

Jeg har lidt svært ved at finde på en god løsning. Det bedste jeg lige
kan finde på er, at dele teksten op i et array ud ved alle "<"-tegn, og
så køre arrayet igennem, hvor jeg gøre preg_replace på alle elementerne,
i den del der kommer efter ">". Men det virker noget klodset.

Det optimale ville selvfølgelig være at gøre det på brødteksten FØR det
blev til html, men det kan altså ikke lade sig gøre her.

--
Mvh.

Niels Andersen



 
 
Andreas Kleist Svend~ (28-10-2001)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 28-10-01 13:47

On Sun, 28 Oct 2001 10:09:57 +0100
"Niels Andersen" <niels-usenet@myplace.dk> wrote:

> Jeg skal markere nogle ord i en tekst. Men teksten er allerede
> html-ificeret, og en generel søg-og-erstat vil også pille ved
> html-tagsene. Og det er jo ikke godt.
>
> Jeg bruger nu noget i stil med dette:
> preg_replace("/\b($word)\b/i", '<span class="mark">\1</span>', $html)
>
> Men hvis ordet nu fx. står i en url i et a-tag, så går det jo helt galt.

Hvad med noget i stil med det her, det er ganske vidst ereg_replace(), men det skulle være til at skrive om for en kender af Perl Regex. (Jeg er ikke kender, derfor ereg_replace())

ereg_replace("(>[^<]*$word[^>]*<)", '<span class="mark">\1</span>', $html);

mvh Andreas

Niels Andersen (28-10-2001)
Kommentar
Fra : Niels Andersen


Dato : 28-10-01 14:05

"Andreas Kleist Svendsen" <usenetnospam@nau.dk> wrote in message
news:20011028134707.1d29cc63.usenetnospam@nau.dk...
> > Jeg bruger nu noget i stil med dette:
> > preg_replace("/\b($word)\b/i", '<span class="mark">\1</span>',
$html)
> >
> > Men hvis ordet nu fx. står i en url i et a-tag, så går det jo helt
galt.
>
> Hvad med noget i stil med det her, det er ganske vidst ereg_replace(),
men
> det skulle være til at skrive om for en kender af Perl Regex. (Jeg er
ikke
> kender, derfor ereg_replace())

Nu er jeg ikke den store "kender", men jeg har her valgt perl regex, da
der tilsyneladende ikke er noget \b-agtigt i den almindelige regex.
En \b på begge sider af ordet gør, at det kun matcher hele ord. Dvs hvis
order er "test", er "tester" ikke et hit.

> ereg_replace("(>[^<]*$word[^>]*<)", '<span class="mark">\1</span>',
$html);

Jeg synes ikke lige jeg kan omskrive det der, til noget der virker.
Hverken perl eller standard.
Måske skulle jeg lige lade det ligge, indtil jeg kan koncentrere mig
fuldt ud om det. :)

--
Mvh.

Niels Andersen



Kim Emax - ayianapa.~ (28-10-2001)
Kommentar
Fra : Kim Emax - ayianapa.~


Dato : 28-10-01 19:20


"Niels Andersen" <niels-usenet@myplace.dk> skrev

> Nu er jeg ikke den store "kender", men jeg har her valgt perl regex, da
> der tilsyneladende ikke er noget \b-agtigt i den almindelige regex.
> En \b på begge sider af ordet gør, at det kun matcher hele ord. Dvs hvis
> order er "test", er "tester" ikke et hit.

ereg("test ", $text);



--
Take Care
Kim Emax
http://www.emax.dk
http://www.ayianapa.dk
http://www.artificial-dreams.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks mest avancerede VinWebShop



Thor Dreier (28-10-2001)
Kommentar
Fra : Thor Dreier


Dato : 28-10-01 19:34

"Kim Emax - ayianapa.dk" <newsgroup@sletdette-ayianapa.dk> wrote in message
news:i%XC7.364$Dj2.68351@news010.worldonline.dk...
> ereg("test ", $text);
>

Hvis du vil tage højde for at ordet kan stå i starten eller slutiningen af
teksten, skal du nok skrive noget i retningen af
ereg("(^|[[:space:]])test($|[[:space:]])", $text);

--
Hygge



Niels Andersen (28-10-2001)
Kommentar
Fra : Niels Andersen


Dato : 28-10-01 21:52

"Kim Emax - ayianapa.dk" <newsgroup@sletdette-ayianapa.dk> wrote in
message news:i%XC7.364$Dj2.68351@news010.worldonline.dk...
> ereg("test ", $text);

Hvad så hvis der er komma efter? Eller punktum? Eller gåseøjn? Eller et
serbo-kroatisk yen-tegn?

--
Mvh.

Niels Andersen



Niels Andersen (28-10-2001)
Kommentar
Fra : Niels Andersen


Dato : 28-10-01 21:53

"Niels Andersen" <niels-usenet@myplace.dk> wrote in message
news:xd_C7.401$dm3.91779@news000.worldonline.dk...
> > ereg("test ", $text);
>
> Hvad så hvis der er komma efter? Eller punktum? Eller gåseøjn? Eller
et
> serbo-kroatisk yen-tegn?

Det sidste bare for at illustrere, at der er rigtigt mange muligheder,
og jeg gider ikke liste dem alle. :)

En mulighed mere: Et ord der SLUTTER på søgestrengen, der skal der
heller ikke erstattes...

--
Mvh.

Niels Andersen



Kim Emax - ayianapa.~ (29-10-2001)
Kommentar
Fra : Kim Emax - ayianapa.~


Dato : 29-10-01 00:34


"Niels Andersen" <niels-usenet@myplace.dk> skrev

> Hvad så hvis der er komma efter? Eller punktum? Eller gåseøjn? Eller et
> serbo-kroatisk yen-tegn?

i know, læste det som "test " og smed bare et hurtigt eks.

eregi("test[^a-z]*", $text); # stadig et hurtigt utestet eks.

--
Take Care
Kim Emax
http://www.emax.dk
http://www.ayianapa.dk
http://www.artificial-dreams.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks mest avancerede VinWebShop



Andreas Kleist Svend~ (28-10-2001)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 28-10-01 23:20

On Sun, 28 Oct 2001 21:53:27 +0100
"Niels Andersen" <niels-usenet@myplace.dk> wrote:

> Det sidste bare for at illustrere, at der er rigtigt mange muligheder,
> og jeg gider ikke liste dem alle. :)

Kunne det være en løsning i stedet for at søge på f.eks. "[^a-zæøå\-]$word[^a-zæøå\-]"? Altså i stedet for at angive tilladte tegn, angive dem der er tegn på et fortsat ord?

mvh Andreas

Niels Andersen (29-10-2001)
Kommentar
Fra : Niels Andersen


Dato : 29-10-01 16:41

"Niels Andersen" <niels-usenet@myplace.dk> wrote in message
news:IXPC7.92$Dj2.37270@news010.worldonline.dk...
> Jeg skal markere nogle ord i en tekst. Men teksten er allerede
> html-ificeret, og en generel søg-og-erstat vil også pille ved
> html-tagsene. Og det er jo ikke godt.
>
> Jeg bruger nu noget i stil med dette:
> preg_replace("/\b($word)\b/i", '<span class="mark">\1</span>', $html)
>
> Men hvis ordet nu fx. står i en url i et a-tag, så går det jo helt
galt.

Det ser ud til, at dette virker:
preg_replace("/(^|>[^<]*)\b($word)\b([^>]*<|$)/i", '\1<span
class="mark">\2</span>\3', $html);

--
Mvh.

Niels Andersen



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