PDA

Volledige versie bekijken : html wissen


Heedless
%Europe/Berlin %754 %2007, 19:06
Ik heb een invulveld, en de inhoud daarvan gaat naar mijn database.
Nu wil ik niet dat mensen er html in kunnen zetten.

Ik kan html tags eruit halen met deze code: $tekst = str_replace('<a>','',$tekst);
$tekst = str_replace('<b>','',$tekst);
$tekst = str_replace('<i>','',$tekst);
$tekst = str_replace('<strong>','',$tekst);
$tekst = str_replace('<u>','',$tekst);

maar dan heb ik nogal een lange lijst + dat ik bang ben codes te vergeten + dat dingen zoals <img ... > al moeilijker worden.

Is er niet een betere manier om dit te doen?
strip_tags heb ik al geprobeerd maar ik kreeg geen resultaat. Maar ook daarbij moet ik zelf alle mogelijkheden in gaan voeren.

edit:
weer eens te snel geweest.
ik gebruike nl2br() voordat hij op tags had gecontroleerd.

Nu heb ik deze code, en die werkt:
function removeEvilAttributes($tagSource)
{
$stripAttrib = "' (style|class)=\"(.*?)\"'i";
$tagSource = stripslashes($tagSource);
$tagSource = preg_replace($stripAttrib, '', $tagSource);
return $tagSource;
}

function removeEvilTags($source)
{
// $allowedTags='<a><br><b><h1><h2><h3><h4><i>' .
// '<img><li><ol><p><strong><table>' .
// '<tr><td><th><u><ul>';
$allowedTags = "";
$source = strip_tags($source, $allowedTags);
return preg_replace('/<(.*?)>/ie', "'<'.removeEvilAttributes('\\1').'>'", $source);
}

$tekst = removeEvilTags($tekst);
$titel = removeEvilTags($titel);

Koen!
%Europe/Berlin %767 %2007, 19:25
Als je de functie htmlentities() (http://nl2.php.net/manual/nl/function.htmlentities.php) toepast op je tekst wordt het volgens mij al vrij lastig (volgens mij ook onmogelijk) om html te posten. Zo worden bijvoorbeeld de '<' en de '>' vervangen door '&lt;' en '&gt;'.

Dan krijg je net zoiets als op dit forum: <b>,</b>,<i>. Kijk maar eens in de bron. :)

Laiverd
%Europe/Berlin %771 %2007, 19:30
string strip_tags ( string str [, string allowable_tags] )


This function tries to return a string with all HTML and PHP tags stripped from a given str. It uses the same tag stripping state machine as the fgetss() function.

Oeps, sorry zie net dat je die al hebt gehad. Volgens mij hoef je trouwens helemaal geen parameters mee te geven, behalve de tags die je WEL wilt toestaan.


John

Heedless
%Europe/Berlin %799 %2007, 20:10
Volgens mij hoef je trouwens helemaal geen parameters mee te geven, behalve de tags die je WEL wilt toestaan.
Inderdaad, daarom staan die ook in een comment zodat ze uit staan.

Dat htmlentities() is misschien nog wel netter, omdat je dan wel code kan bespreken ofzo, maar niet uitvoeren... ik moet maar even kijken wat in dit geval handiger is. De kans dat iemand op de site waar dit voor is, html wil bespreken is 0,0 dus dan wis ik liever alle tags zodat ze ook onzichtbaar zijn.

BernardV
%Europe/Berlin %820 %2007, 20:42
Kwam deze (http://simonwillison.net/2003/Feb/23/safeHtmlChecker/) ooit eens tegen, misschien heb je er iets aan. Zo zou je bold tags wel kunnen toestaan, maar <script> bv niet.