Zend - The PHP Company




Miscellaneous

Add Code


HTML validation  

Type: code fragment
Added by: akmalxxx
Entered: 18/10/2006
Last modified: 02/11/2005
Rating: - (fewer than 3 votes)
Views: 1841
simple html validating function


<?
//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_2PREG_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





Search



This Category All Categories