Miscellaneous
|
|
|
|
<? //HTML Validation handler
global $html_tag,$html_end;
$html_tag=array(
//type(0=single,1=block),replace name,attrib pattern, replace with
//single
'br'=>array(0),
'hr'=>array(0),
'img'=>array(0),
//block
'h1'=>array(1),'h2'=>array(1),'h3'=>array(1),'h4'=>array(1),'h5'=>array(1),'h6'=>array(1),
'p'=>array(1),'blockquote'=>array(1),'pre'=>array(1),'div'=>array(1),'span'=>array(1),
'strong'=>array(1),'em'=>array(1),'a'=>array(1),
'b'=>array(1,'strong'),
'i'=>array(1,'em'),
'u'=>array(1,'span','/(.*?)/',' style="text-decoration:underline"'),
'ul'=>array(1),'ol'=>array(1),'li'=>array(1)
);
$html_end=array(); //container for opened tag
function html_safe($str)
{
global $html_end;
$html_end=array(); //reset
$str=str_replace('javascript:','#',trim($str)); //no js
//get tags
$buf=preg_replace_callback("/<(.*?)>/",'html_check',$str);
$c=$p='';
while ($p=array_pop($html_end)) $c.='</'.$p.'>';
return $buf.=$c;
}
function html_check($tag)
{
global $html_end,$html_tag;
$tag=$tag[1];
if (preg_match("/^(/?)([a-z0-9]+)(.*?)/?$/i", $tag, $m)) {
$n=strtolower($m[2]);
if (!isset($html_tag[$n])) return '';
//end block
if ($m[1]=='/') {
if (!$html_tag[$n][0]) return ''; //single should not close
if ($html_tag[$n][1]) $n=$html_tag[$n][1]; //new name
if (in_array($n,$html_end)) { //close now
$c=$t='';
while ($t!=$n) { $t=array_pop($html_end); $c.='</'.$t.'>'; }
return $c;
}
else return '';
}
//start/single
else {
//do attribute
$p='';
preg_match_all("/([a-z0-9]+)="(.*?)"/i", $m[3], $ma_2, PREG_SET_ORDER);
preg_match_all("/([a-z0-9]+)=([^"s]+)/i", $m[3], $ma_1, PREG_SET_ORDER);
$ma_3=array_merge($ma_1, $ma_2);
foreach($ma_3 as $ma) {
$a = strtolower($ma[1]);
if ($a[0]=='o' && $a[1]=='n') continue; //js behaviour eg: onload
$p.=' '.$a.'="'.$ma[2].'"';
}
if ($html_tag[$n][2]) $p=preg_replace($html_tag[$n][2], $html_tag[$n][3], $p); //replace pattern
//finalize tag
if ($html_tag[$n][1]) $n=$html_tag[$n][1];
if (!$html_tag[$n][0]) return '<'.$n.$p.'/>'; //single
else { array_push($html_end,$n); return '<'.$n.$p.'>'; } //block
}
}
return ''; //unknown syntax
}
?>
|
|
|
Usage Example
|
use html_safe to validate
|
|
|
Rate This Script
|
|
|
|