Avatar billede jannodl Nybegynder
04. april 2009 - 18:49 Der er 8 kommentarer og
1 løsning

str_replace - men kun 1 gang

Hej Alle

Jeg har brug for en replace funktion på mine sider, og det fungere fint i text delen af min side, men hvordan får jeg den til kun at udføre replace en gang selvom der er flere af slagsen?

Eksempel:
Denne fungerer fint:
$Article->text = str_replace('insurance','<a href="http://example.com">insurance</a>', $Article->text);

Men den erstatter samtlige tilfælde af insurance med linket, Hvad skal tilføjes så den kun linker en enkelt gang?

Jeg ved det er muligt, kan bare ikke helt gennemskue hvordan, og synes ikke at kunne finde det ved en søgning herinde.

Mange hilsner
Janno
Avatar billede erikjacobsen Ekspert
04. april 2009 - 20:37 #1
Du kan formentlig

$Article->text = preg_replace('/insurance/','<a href="http://example.com">insurance</a>', $Article->text);
Avatar billede jannodl Nybegynder
04. april 2009 - 21:57 #2
Hmmm... det linker intet, og det ser da heller ikke ud som der nogen steder er defineret at den kun skal foretage en replace?
Eller ligger det i preg?

Selv om ingen links er bedre end for mange :)
Nå, det var ihvertfald ikke løsningen, ellers tak for forsøget!
Avatar billede erikjacobsen Ekspert
04. april 2009 - 22:30 #3
Den erstatter skam, men der manglede lige noget ;)
Kig på http://n0p.com/870711.php som udfører denne kode:

<?php
    $s = "Der er mere insurance mellem himmel og jord end så mange andre steder der er insurance, skulle jeg mene";
    $t = preg_replace('/insurance/','<a href="http://example.com">insurance</a>', $s,1);
    print "$s<br>$t<br>";
?>
Avatar billede jannodl Nybegynder
04. april 2009 - 23:14 #4
Men skal jeg så definere hele teksten hver gang jeg skal lave en replace?
Det virker noget besværligt...

Eller er der noegt jeg bare ikke fanger?
Du skal vide at jeg ikke er den skarpeste php kniv i skuffen, så det skal nok forklares lidt tydeligt...
Og jeg fanger ikke helt hvordan jeg skal få det til at virke.

Mine templates har en php section, så jeg behøver slet ikke at skrive mere end i eksemplet, altså uden php tags...
Sku jeg så udskifte $s med $Article og kopiere hele teksten ind hver gang? det må da kunne være nemmere...

Janno
Avatar billede erikjacobsen Ekspert
04. april 2009 - 23:19 #5
Du skal gøre det samme som du gør med din str_replace - bare som jeg skriver det. Og du skal bruge dine egne variabelnavne. Derfor kunne det muligvis bare være

$Article->text = preg_replace('/insurance/','<a href="http://example.com">insurance</a>', $Article->text,1);

Fordelen ved en sløv kniv er, at man måske må tage den med i byen ;)
Avatar billede jannodl Nybegynder
04. april 2009 - 23:20 #6
$Article->text = str_replace('insurance','<a href="httpadresse">insurance</a>', $Article->text);

Det her linker ordet unsurance, eller hvad end jeg putter derind, men det linker 7 gange hvis det står 7 gange i teksten. jeg behøver ikke gøre andet end tilføje den linie med at nyt ord, og så klarer den resten.
Jeg ville bare gerne have at den stoppede efter at have lavet 1 link, lissom i dit eksempel, men uden at jeg skulle definere det for hver artikel.
Altså sådan at når jeg skriver insurance i en fremtidig artikel, så kommer der automatisk et link, og kun et.
Håber det er forståeligt.

Janno
Avatar billede erikjacobsen Ekspert
04. april 2009 - 23:27 #7
Jeg forstår ikke hvad dit problem er. Anvender du preg_replace som anført, skulle det gøre, hvad jeg forstår, du mener, det skal gøre.
Avatar billede jannodl Nybegynder
04. april 2009 - 23:41 #8
Hej Erik

Det sidste indlæg er skrevet uden at have set dit svar, det virker perfekt nu... den tar det første af ordene og linker... Smukt

Tak for hjælpen, du er en knag... hehe Hvis det altså ikke generer dig at være en knag, ellers kan du selv preg_replace det med noget du synes om :)

Tusind tak for hjælpen, det er en genial funktion at have til intern linking.

Janno
Avatar billede erikjacobsen Ekspert
04. april 2009 - 23:46 #9
Knag eller kniv - ligemeget ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester