Avatar billede nwn Nybegynder
17. oktober 2008 - 12:22 Der er 1 kommentar og
1 løsning

Undgå at bbtags i indlæg overskriver andre indlæg

Hej.

I mit forum tillader jeg bbtags, så som , osv. Det giver sig selv, alt indenfor f.eks og bliver skrevet med fed.

For at brugeren ikke ved et uheld kommer til at glemme skråstregen til at afslutte bbtagget, så der f.eks står Tekst[b], så har jeg sat PHP dokumentet til at tælle antal [b] og . Er tallene ikke ligmed hinanden, så udskriver den fejl.

Problemet er så, hvis brugeren derimod er ude på at fucke det op, så skriver vedkommende f.eks [/b], og så vil alle indlæg osv også blive skrevet med fed.

Jeg skulle så finde på en løsning til dette, og jeg valgte at tælle antal start tags ([b], [i], [u]) osv. Så i slutningen af det brugeren indsætter til databasen, blev der automatisk tilføjet samme antal
, som der er antal [b]. Problemet er bare, at hvis så brugeren nu har gjort det korrekt og husket at afslutte helt korrekt (Som de fleste gør), så kan det gå ind og fucke designet op.

F.eks bruger en bruger [code]Kode her[/code] i sit indlæg, hvilket opretter en div, og der så i slutningen af indlægget, automatisk skrives </div>, så går det ind og afslutter nogle andre divs i selve designet.

Er der nogle, der har en ide eller løsning til, hvordan man undgår, at et indlæg går ind og fucker de andre op? Og selvfølgelig spørgsmålet, så det ikke fucker ALLE indlæggene op.

Jeg vil ikke bruge iframes/frames. Tak på forhånd.
Avatar billede tiller3 Nybegynder
18. oktober 2008 - 08:42 #1
Den bedste loesning, kommer an paa hvordan du vil haandtere at brugeren skriver noget saa som
HejMedDig

Dette er naturligvis ikke gyldig bb kode, men vil du godkende det, eller afvise det?

Hvis du kun vil godkende gyldig kode, saa er loesningen meget nem. Hvergang du moeder et Start tag skal du laegge det paa en stack, og hvergang du moeder et slut tag, skal du tage det af stacken, og sammenligne det med det start tag der ligger paa toppen. Hvis de ikke er ens, er koden ugyldig. Dette foresaetter til der ikke er flere bb tags. bb koden er saa gyldig, hvis og kun hvis din stack er tom.

------------------- Eller som php kode ---------------------
// Note that this code have not been testet, but it should work. Or atleast show
// how it can be done. :}

$myStack=array(); // Dette er vores stack.
$pos=0;
while($nextTag=find_next_tag($data,$pos)) {
  if(is_start_tag($nextTag)) {
    $tagValue=get_bb_tag_content($nextTag);
    array_push($myStack,$tagValue); // Dette er et start tag, saa laeg det paa stacken.
  }
  else {
    // Dette er et slut tag.
    $lastSeenTag=array_pop($myStack);
    if($lastSeenTag!=$nextTag) {
      die("Invalid bb code");
    }
  }
}
if(count($myStack)==0) {
  echo "Din bb kode er gyldig.
}

/** This method finds the next bb tag from the data, and return it. It finds both start and end tags. It return null if there are no more tags */
function find_next_tag($data,& pos) {
  // Write it yourself.
}

/** This method return true, if $tag is a start tag, and false if it's an end tag. */
function is_start_tag($tag) {
  // Write it yourself. (It's a single line of code)
}

/** get_bb_tag_content returns the content of a bb tag. The content is the text between [ and ],
so if the input is [b] then this function return b */
function get_bb_tag_content($tag) {
  // This function can be implemented in a single line of code :}
}
Avatar billede nwn Nybegynder
18. oktober 2008 - 14:40 #2
Hej.

Tak for det gode indlæg, lyder i hvertfald til det kan bruges. Jeg kigger lige på det senere, da jeg har lidt travlt lige nu :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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