Version: 0.3
Type: Function
Category: HTML
License: GNU General Public License
Description: Cleans up HTML by removing unwanted tags. Great when you want to allow some HTML in form content that is to be posted on a HTML page, but don’t want to risk ruining the page.
<?php function SaveHTML($str, $allow_font = false, $allow_img = false, $allow_lists = true) { $approvedtags = array( 'p' => 2, // 2 means accept all qualifiers: <foo bar> 'b' => 1, // 1 means accept the tag only: <foo> 'i' => 1, 'u' => 1, 's' => 1, 'a' => 2, 'em' => 1, 'br' => 1, 'strong' => 1, 'strike' => 1, 'blockquote' => 1, 'tt' => 1, 'hr' => 1 ); if ($allow_font == true) { $approvedtags['font'] = 2; $approvedtags['big'] = 1; $approvedtags['sup'] = 1; $approvedtags['sub'] = 1; } if ($allow_img == true) $approvedtags['img'] = 2; if ($allow_lists == true) { $approvedtags['li'] = 1; $approvedtags['ol'] = 1; $approvedtags['ul'] = 1; } $keys = array_keys($approvedtags); $str = stripslashes($str); $str = eregi_replace("<[[:space:]]*([^>]*)[[:space:]]*>","<1>",$str); $str = eregi_replace("<a([^>]*)href="?([^"]*)"?([^>]*)>","<a href="2">", $str); $tmp = ''; while (eregi("<([^> ]*)([^>]*)>",$str,$reg)) { $i = strpos($str,$reg[0]); $l = strlen($reg[0]); if ($reg[1][0] == "/") $tag = strtolower(substr($reg[1],1)); else $tag = strtolower($reg[1]); if ((in_array($tag, $keys))&&($a = $approvedtags[$tag])) { if ($reg[1][0] == "/") $tag = "</$tag>"; elseif ($a == 1) $tag = "<$tag>"; else $tag = "<$tag " . $reg[2] . ">"; } else $tag = ''; $tmp .= substr($str,0,$i) . $tag; $str = substr($str,$i+$l); } $str = $tmp . $str; // Squash PHP tags unconditionally $str = ereg_replace("<?","",$str); // Squash comment tags unconditionally $str = ereg_replace("<!--","",$str); return $str; } ?>