Avatar billede dannitn Nybegynder
01. november 2009 - 14:22 Der er 4 kommentarer

BBCodes - Citat funktion / Regular Expressions

Hej eksperter.

Jeg er igang med at udvikle en citat-funktion med bbcodes/regex. Det virker, når jeg skal citere én besked, men hvis jeg citerer en besked, som er citeret fra en anden, vil jeg gerne have alle citerede beskeder samlet i ét. Altså, jeg vil samle parent- og children-citater i én besked.

Det virker, når jeg skal citere én besked. Problemet ligger i, at når jeg citerer en besked, der allerede indeholder en citat, så vil den kun acceptere ét par
""
. De andre udelukkes og vises bare som tekst.

Så hele idéen er, at jeg vil samle alle citaterne i én besked, så der kommer flere og flere bokse, hvis der er flere, der citerer beskederne videre.

Her er min BBCode funktion:

<?php
function bbcode($text){
    $find = array(
    "#\[citat\](.*?)\[/citat\]#is"
    );
   
    $replace = array(
    "<div style=\"border: 1px solid #000000; background: #F2F2F2;\"><div style=\"padding: 3px;\">\\1</div></div>"
    );
   

    $text = preg_replace($find,$replace,$text);
    return $text;
}
?>

Det bør også nævnes, at jeg ikke er ekspert hvad angår regex. Jeg har forgæves pillet ved koderne og leget mig frem.
Avatar billede jantzen88 Nybegynder
01. november 2009 - 14:46 #1
Er heller ikke lige frem den bedste til regex men her er hvad jeg har fundet frem til :)

function bbcode($text){
    $find = array("/\[citat\](.*?)\[\/citat\]/is");
 
    $replace = array("<div style=\"border: 1px solid #000000; background: #F2F2F2;\"><div style=\"padding: 3px;\">$1</div></div>"
    );
Avatar billede dannitn Nybegynder
01. november 2009 - 18:47 #2
Hmm - det giver stadig samme effekt. :/
Her er et bedre eksempel:
http://i37.tinypic.com/33kgiuh.png
Avatar billede jantzen88 Nybegynder
01. november 2009 - 19:03 #3
$find = array("/\[citat\](.*?)\[\/citat\]/i");
Avatar billede dannitn Nybegynder
01. november 2009 - 19:23 #4
jantzen88: Nu sker der overhovedet intet. Jeg har oplevet med kun /i, at den kun kan tage det, der står på én linje ligeud - men ikke, hvis der er line breaks ved dem.
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