Avatar billede sebjlan Nybegynder
11. februar 2006 - 23:52 Der er 9 kommentarer og
1 løsning

Hvordan "begrænser" jeg str_replace ?

Hej,

Jeg har to arrays, hvori jeg har noget text, som jeg gerne vil have erstattet med billeder, hvis det forekommer i variablen $text.

$text = $besked[$num];

$smilies = array(":)","::)");
$images = array("<img src=\"http://domain.dk/smilies/icon_smile.gif\" />", "<img src=\"http://domain.dk/smilies/icon_rolleyes.gif\" />");

str_replace($smilies,$images,$text);

Mit problem er så at hvis der forekommer "::)" i teksten, bliver det erstattet af billedet for ":)" med et kolon foran. Jeg har overvejet, om det kan løses ved at bytte om på rækkefølgen i mine arrays, men jeg vil helst undgå det.
Jeg ønsker altså, at mine smilies kun erstattes, hvis de står alene, altså uden andet tekst udenom.

På forhånd tak
Avatar billede erikjacobsen Ekspert
11. februar 2006 - 23:57 #1
Prøv http://php.net/strtr

  $a=array(":)" => "denene", "::)" => "denanden");
  print strtr("Der er :) mellem ::) og jord",$a);
Avatar billede sebjlan Nybegynder
12. februar 2006 - 00:03 #2
Kan det ikke gøres, så jeg har én array med det, der skal erstattes, og en anden array med det, det skal erstattes med?
Ellers bliver det for overskueligt med alle de smillies jeg har (jeg har dog flere end i mit spørgsmål).
Avatar billede tjp Mester
12. februar 2006 - 01:12 #3
Du kan sætte de to arrays sammen med 'array_combine' og bruge det i strtr, for det er nok den du skal bruge, da den altid matcher på det længste match:

$nytarrr = array_combine ( $smilies, $images )
print strtr("Der er :) mellem ::) og jord",$nytarr);
Avatar billede nielle Nybegynder
12. februar 2006 - 10:08 #4
Du kan jo også bare skrive det op med et bytte-par pr. linje:

$a = array(
":)"  => "<img src=\"http://domain.dk/smilies/icon_smile.gif\" />",
"::)" => "<img src=\"http://domain.dk/smilies/icon_rolleyes.gif\" />"
);

Jeg ville faktisk mene at dette var lettere at overskue end når du har dem i to separate arrays.
Avatar billede johan.o Nybegynder
12. februar 2006 - 10:22 #5
Hm, ikke 100 her men kan du ikke blot bytte om på rækkefølgen i dine array's -->

$smilies = array("::)",":)");
$images = array("<img src=\"http://domain.dk/smilies/icon_rolleyes.gif\" />", "<img src=\"http://domain.dk/smilies/icon_smile.gif\" />");

Mvh. Johan
Avatar billede johan.o Nybegynder
12. februar 2006 - 10:24 #6
Arh, slå nu øjnene op Johan, der bliver jo spurgt om flere ting..tsk tsk

Mvh. Johan
Avatar billede sebjlan Nybegynder
12. februar 2006 - 16:53 #7
>>> erikjacobsen
>>> tjp

Det virker glimrende :-)

Lægger I et svar?
Avatar billede erikjacobsen Ekspert
12. februar 2006 - 16:58 #8
Jeg samler slet ikke på point, tak.
Avatar billede sebjlan Nybegynder
12. februar 2006 - 17:05 #9
Men tak for hjælpen.

Så må tjp bare få hele puljen :P
Avatar billede tjp Mester
12. februar 2006 - 20:15 #10
Ok med mig, pft.
;-)
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