Kilka dni temu usiadłem i napisałem funkcję, która przeszukuje stringa w poszukiwaniu niedozwolonych tagów HTML i je wycina. Przydatna sprawa, jeśli chcemy dać użytkownikowi możliwość formatowania tekstu na stronie a nie chcemy używać bbCode ani być narażonym na złośliwości z jego strony (np. wklejenie brzydkiego kodu JavaScript ;) )


function htmltags($string)
{
    // tablica dozwolonych tagów
    $allowed=Array('a','img','b','i','u');
 
    // główna pętla szukająca w ciągu znaków początku tagu (<)
    for ($licz=0; $licz<strlen($string); $licz++)
    {
        if ($string[$licz]=='<')
        {
            $dozwolony=0;
            // sprawdza, czy kolejne znaki po znaku < odpowiadają któremuś z dozwolonych tagów
            for ($liczy=0; $liczy<count($allowed); $liczy++)
            {
                $tag=substr($string,$licz+1,strlen($allowed[$liczy]));
                if ($string[$licz+1]=='/') $tag=substr($string,$licz+2,strlen($allowed[$liczy]));
                //echo $tag."<br>";
                //echo $string[$licz+1+strlen($allowed[$liczy])]."<br>";
                if ($tag==$allowed[$liczy])
                {
                    if (($string[$licz+1+strlen($allowed[$liczy])]=='>')
                    ||($string[$licz+2+strlen($allowed[$liczy])]=='>')
                    ||($string[$licz+1+strlen($allowed[$liczy])]==' ')
                    ||($string[$licz+2+strlen($allowed[$liczy])]==' '))
                    {
                        $dozwolony=1;
                        break;
                    } 
                }
            }
            if ($dozwolony==0) 
            {
                for ($licznik=$licz; $licznik<strlen($string); $licznik++)
                {
                    if ($string[$licznik]=='>') 
                    {
                        $string[$licznik]=' '; 
                        break;
                    }
                    $string[$licznik]=' '; 
                }
 
            }
        }
    }
     $string=str_replace('  ',' ',$string);
    return $string;
}
Dodano 27/12/2008 o 22:46
Kategoria: PHP
Tagi: , , , , , ,