Avatar billede Slettet bruger
19. august 2008 - 12:38 Der er 13 kommentarer og
1 løsning

Checke om variabel kun indeholder tilladte tags

Hej

Jeg har dette array:
$allowed = array("<strong>","</strong>","<em>","</em>");

if $textarea indeholder andet end $allowed {
  echo "Fejl";
}

Hvordan laver jeg ovenstående kode?
Bemærk at det kun er tags nøjagtig magen til tags i $allowed der må tillades.
Avatar billede w13 Novice
19. august 2008 - 12:41 #1
Løste Jakobdo det ikke?
Avatar billede Slettet bruger
19. august 2008 - 12:54 #2
Jo delvist, men så alligevel ikke.

Jeg angav at <strong> måtte godkendes, hvilket resulterer i at <strong xxx> også blive godkendt.

Jeg hælder mest til at angive hvad der er tilladt, og at alt andet så ikke er tilladt.

Ved at bruge strip_tags var jeg pludselig ude i det modsatte, altså skulle tænkte over hvad der kunne komme der ikke var tilladt, og hvordan jeg ville få det bremset.

Så beslutte jeg at det nok var bedst at kontrollere for andet end de tilladte, og ellers lade brugeren lave det om, hvis der var ugyldige ting med.
Avatar billede jakobdo Ekspert
19. august 2008 - 14:36 #3
Kan du ikke lave noget kode som først kører strip_tags() med de tilladte tags, og som så efterfølgende fjerner alt efter:

<noget (FJERNES FRA TAGGET)>
Avatar billede jakobdo Ekspert
19. august 2008 - 14:44 #4
Ikke testet til fulde, men hvad med:

$stripped_indhold = strip_tags($indhold_fra_brugeren,'<strong><em>');

$indhold = preg_replace('/<([a-z])+(?:.*?)>/s', '<$1>', $stripped_indhold);
Avatar billede Slettet bruger
19. august 2008 - 14:59 #5
Fungerer ikke helt:
<p><strong>Fed</strong><em>Kursiv</em></p>
Originalt input:

Ændret input:
<g>Fed</strong><m>Kursiv</em>

Et af de problemer jeg rendte ind i var at copy/paste fra f.eks. word, kunne resultere i en masse <p></p> i stedet for linieskift. De forsvinder og teksten kommer i en stor rodebunke.
Avatar billede jakobdo Ekspert
19. august 2008 - 15:12 #6
Hvad så noget i stil med:


$stripped_indhold = strip_tags($indhold_fra_brugeren,'<strong><em>');

$indhold = preg_replace('/<([a-z]+)(?:\s(?:.*?))?>/s', '<$1>', $stripped_indhold);
Avatar billede Slettet bruger
19. august 2008 - 15:29 #7
Så virker det.

Det eneste problem jeg har tilbage er at min grundkode kan se sådan her ud:
<p>Hej<br><br>Her er noget tekst.<p>Her er noget mere</p>Her er noget tekst<br><br></p>

<p> og </p> rundt om det samlede output skal ikke bruges, så det er fint det er væk, men dem i midten skulle gerne erstattes af linieskift.

Måske skal jeg erstatte <p> og </p> med /r/n og så bruge trim?
Avatar billede w13 Novice
19. august 2008 - 15:34 #8
Ja, erstat dem først.
Avatar billede jakobdo Ekspert
19. august 2008 - 15:38 #9
Det er jo et spørgsmål om at kalde de forskellige ting i den rigtige rækkefølge. :o)
Avatar billede Slettet bruger
19. august 2008 - 15:59 #10
Hm, umiddelbart ser det ud til at virke, synes dog koden virker lidt oldnordisk.

Nogle forslag til at koge dette ned?

    $_SESSION['forum']['indlaeg'] = ereg_replace("<p>", "/r/n", $_POST['indlaeg']);
    $_SESSION['forum']['indlaeg'] = ereg_replace("</p>", "/r/n", $_POST['indlaeg']);
    $_SESSION['forum']['indlaeg'] = ereg_replace("<br />", "/r/n", $_SESSION['forum']['indlaeg']);
    $_SESSION['forum']['indlaeg'] = ereg_replace("<br>", "/r/n", $_SESSION['forum']['indlaeg']);
    $_SESSION['forum']['indlaeg'] = trim($_SESSION['forum']['indlaeg'],"");
    $_SESSION['forum']['indlaeg'] = strip_tags($_SESSION['forum']['indlaeg'],'<strong><em>');
    $_SESSION['forum']['indlaeg'] = preg_replace('/<([a-z]+)(?:\s(?:.*?))?>/s', '<$1>', $_SESSION['forum']['indlaeg']);
    $_SESSION['forum']['indlaeg'] = ereg_replace("/r/n", "<br>", $_SESSION['forum']['indlaeg']);
Avatar billede jakobdo Ekspert
19. august 2008 - 16:02 #11
Du kunne jo overveje at bruge:
http://dk.php.net/str_replace
Den kan tage et array som input og det kan du så replace med \r\n
Avatar billede jakobdo Ekspert
19. august 2008 - 16:02 #12
Og så får du et svar.
Avatar billede Slettet bruger
19. august 2008 - 16:10 #13
Vil jeg prøve at kigge på.

Tak for hjælpen.... igen :)
Avatar billede jakobdo Ekspert
19. august 2008 - 18:02 #14
Takker for point.
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