Avatar billede mrfunder Nybegynder
24. oktober 2008 - 22:57 Der er 7 kommentarer og
1 løsning

Tjek indholdet af string for valg af print metode

Kære Eksperter.

Jeg har et problem med en PHP funktion som skal tjekke indholdet af en string.

Når mine brugere skriver en kommentar på mit forum bliver den gemt i databasen, herefter bliver den igen printet direkte uden megen bearbejdning når ønsket.

Jeg ønsker at lave det således at hvis det er en tom besked uden nogen citat blok skal den blot printes inde i en ganske almindelig <p>

Eksempel: <p>Min besked</p>

Men indeholder den i string:

[citat:Jesper Andersen]Et værdifuldt citat[/citat]
Min besked

Skal det printes anderledes:
Eksempel: <div class=”comment”><span>Jesper Andersen</span><p><i>Et værdifuldt citat</i></p></div><p>Min besked</p>

Hvordan får jeg tjekket indholdet af en forum besked, og herefter genereret det passende indhold? Er der nogen som kan lede mig på vej, eventuelt med et eksempel :- )

På forhånd tusind tak..
Avatar billede coderdk Praktikant
24. oktober 2008 - 23:31 #1
echo preg_replace( "#\[citat:(.*?)\](.*?)\[/citat\]#si", '<div class="comment"><span>\\1</span><p><i>\\2</i></i></p></div>', $besked );
Avatar billede mrfunder Nybegynder
25. oktober 2008 - 00:46 #2
Hej coderdk

Mange tak for svaret.

Kan man eventuelt lægge dem i variabler inden det printes? Således jeg ville kunne hente flere informationer om brugernavnet igennem databasen?

Venligst Kasper
Avatar billede coderdk Praktikant
25. oktober 2008 - 04:36 #3
Uhm yep:

$ny_besked = preg_replace( "#\[citat:(.*?)\](.*?)\[/citat\]#si", '<div class="comment"><span>\\1</span><p><i>\\2</i></i></p></div>', $besked );

? :)
Avatar billede mrfunder Nybegynder
25. oktober 2008 - 12:07 #4
Hej igen :)

Jeg tænkte mere på f.eks. brugernavnet man quoter? altså \\1?
Avatar billede coderdk Praktikant
25. oktober 2008 - 16:37 #5
Hmmm, jooh, det kan du gøre på flere måder... Den der lige falder i tankerne, er at bruge /e-switchen:

function HentNavn($navn)
{
  return "----$navn----";
}

$ny_besked = preg_replace( "#\[citat:(.*?)\](.*?)\[/citat\]#sie", '\'<div class="comment"><span>\'.HentNavn(\'\\1\').\'</span><p><i>\\2</i></i></p>\'', $besked );
Avatar billede mrfunder Nybegynder
25. oktober 2008 - 17:58 #6
Hej igen :)

Endnu engang tak for svaret! Jeg er lige på vej ud af døren, så vil kigge på det snarest imorgen tidlig/sen aften- for at være bøvlet en sidste gang, er det muligt man kan tjekke om den indeholder noget med [citat] inden man vælger at printe det med en pregreplace? :) jeg mener, indeholdte den kun en almindelig string (besked uden kommentar) skal den printes uden noget..

På forhånd tak
Avatar billede mrfunder Nybegynder
29. oktober 2008 - 17:46 #7
Jeg takker for hjælpen, og beklager min respons tid.
Avatar billede coderdk Praktikant
29. oktober 2008 - 23:23 #8
:)

Teoretisk set, for at checke for nestede citater, bør man bruge greed og flere replaces:

$ny_besked = preg_replace( "#\[citat:(.*?)\](.*)\[/citat\]#sie", '\'<div class="comment"><span>\'.HentNavn(\'\\1\').\'</span><p><i>\'.CheckForCitat(\'\\2\').\'</i></i></p>\'', $besked );

Her skal CheckForCitat gøre det samme indtil der ikke er mere, at replace...
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