zl程序教程

您现在的位置是:首页 >  后端

当前栏目

php表单敏感字符过滤类

PHP字符 表单 过滤 敏感
2023-06-13 09:15:32 时间

本文实例讲述了php表单敏感字符过滤类及其用法。分享给大家供大家参考。具体分析如下:

复制代码代码如下:


/**
*表单生成验证文件
*/
$_form=newformHtmlFind();
classformHtmlFind{
       /**
        *输出表单函数
        *$formKey 表单键
        *$infoArray更新时的原始信息数组
        */
 
       publicfunctionformHtml($array,$infoArray="")
       {
               //检测数组是否存在
               if(emptyempty($array))returnfalse;
               $newform=null;
               //信息数组(更新信息)
               $this->infoArray=!emptyempty($infoArray)?$infoArray:array();
               $this->array["class"]= get_class_methods(get_class());
               foreach($arrayas$key=>$arr)
               {
                       //键值转换为纯英文
                       $key=preg_replace("/[^a-z]/i","",$key);
                       //生成表单
                       $newform.=$this->outputForm($arr,$key);
               }
               //输出表单
               return$newform.$this->jsError();
       }
       /**
        *生成表单函数
        */
       privatefunctionoutputForm($arr,$key)
       {
               $value=null;
               if(emptyempty($arr))returnfalse;
               //inputType
               $type  =$key;
               //inputNAME
               $name  =trim($arr[0]);
               //input初始值不包含多选,单选类
               $value =(!emptyempty($this->infoArray[$name]))?trim($this->infoArray[$name]):trim($arr[1]);
               $value =emptyempty($this->post[$name])?$value:trim($this->post[$name]);
               //inputTitle
               $title =trim($arr[2]);
               //样式
               $style =trim($arr[3]);
               if($key!=="hidden")
               {
                       $dt="<dt>{$title}</dt><dd>";
                       //js错误提示
                       $dd="<ttid="J{$name}"></tt></dd>rn";
               }
               return(!preg_match("/checkbox|select|radio/i",$key))?
               $dt.$this->newInput($type,$name,$value,$style,$title).$dd:
               $this->formSelect($type,$name,$arr[1],$title,$style);//多选类
       }
       /**
        *提交数据检测
        */
       publicfunctionpostForm($array)
       {
               //检测数组是否存在
               if(emptyempty($array)||emptyempty($_POST))returnfalse;
               $this->post          = $_POST;
               $this->array["class"]= get_class_methods(get_class());
               foreach($arrayas$key=>$arr)
               {
                       //键值转换为纯英文
                       $key=preg_replace("/[^a-z]/i","",$key);
                       //检测注销file类表单
                       if(!emptyempty($arr)&&"file"!=$key)$newData[trim($arr[0])]=$this->postFind($arr,$key);
               }
               //输出表单
               if(!emptyempty($this->error))
               {
                       returnfalse;
               }
               elsereturn$newData;
       }
       /**
        *生成表单
        */
       privatefunctionnewInput($type,$name,$value,$style,$title)
       {
               switch($type)
               {
                       case"text":
                               //单行文本
                               return "<inputtype="text"name="{$name}"value="{$value}"{$style}/>";
                               break;
                       case"password":
                               //密码输入
                               return"<inputtype="password"name="{$name}"{$style}/>";
                               break;
                       case"":
                               //多行文本
                               return"<textareaname="{$name}"{$style}/>{$value}</textarea>";
                               break;
                       case"hidden":
                               //隐藏
                               return"<inputtype="hidden"name="{$name}"value="{$value}"{$style}/>";
                               break;
                       case"file":
                               //文件上传
                               return"<inputtype="file"name="{$name}"{$style}/>";
                               break;
                       case"submit":
                               //提交
                               return"<inputtype="submit"name="{$name}"value="$value"$style}/>";
                               break;
                       default:
                               return"{$type}类型错误!!!";
                               break;
               }
       }
       /**
        *提交信息检测
        *错误返回error
        */
       privatefunctionpostFind($arr,$key)
       {
               if(emptyempty($arr))returnfalse;
               $name=$title=$error=$find=$standard=null;
               //inputNAME
               $name    =trim($arr[0]);
               //inputTitle
               $title   =trim($arr[2]);
               //错误提示
               $error   =trim($arr[4]);
               //检测类型YN
               $find    =trim($arr[5]);
               //检测标准
               $standard=trim($arr[6]);
               //
               if(!emptyempty($standard))$this->error.=$this->ck_split($standard,$name,$title,$find,$error);
               //转换为字符串
               if(is_array($this->post[$name]))$this->post[$name]=implode(",",$this->post[$name]);
               //转义或其他转化
               $KKarray=array();
               if(preg_match("/Y|N/is",$find))
               {
                       $KKarray      =split("_",$find);
                       //转义或过滤
                       $escape_filter=(!emptyempty($KKarray[1]))?"ck_".$KKarray[1]:"";
                       //输出通过检测的合法数据
                       $data         =($escape_filter)?$this->$escape_filter($this->post[$name]):$this->post[$name];
 
               }
               else $data       ="";
               //输出新的数据
               return$data;
       }
       /**
        *多选类表单生成
        */
       privatefunctionformSelect($type,$name,$value,$title,$style)
       {
               $outform=null;
               //触发更新和提交动作时的初始
               $nowvalue=(!emptyempty($this->post[$name]))?$this->post[$name]:$this->infoarray[$name];
               //兼容多选的识别,转为数组
               if(!emptyempty($nowvalue))$valueArray=explode(",",$nowvalue);
               //选项标题
               if(is_array($title))
               {
                       array_unshift($title,"选择");
                       $titarray=array_values($title);
               }else$titarray=explode("|",$title);
               //选项值
               if(is_array($value))
               {
                       array_unshift($value,"选择");
                       $valarray =array_keys($value);
                       if(emptyempty($title))$titarray=array_values($value);
               }
               else$valarray=explode("|",$value);
               //取消表单的初始默认值
               if(!emptyempty($this->post)&&!emptyempty($this->infoArray))$value=preg_replace("/Y_/i","",$value);
 
               foreach($valarrayas$key=>$varl)
               {
                       //非默认的识别
                       if(!emptyempty($valueArray))$select  =(in_array($varl,$valueArray))?"Y":"";
                       // 判断是否为默认
                       else$select  =(eregi("Y_",$varl))?"Y":"";
 
                       if($key>"0")
                       {
                               $_title=($titarray[$key])?$titarray[$key]:$title;
                               switch($type)
                               {
                                       case"select":
                                               if("Y"==$select)$select="selected";
                                               $outform.=       sprintf("<option%svalue="%s"/>%s</option>rn"
                                               ,$select,preg_replace("/Y_/i","",$varl),$_title);
                                               break;
                                       case"radio":
                                               if("Y"==$select)$select="checked";
                                               $outform.=sprintf("<label>%s<input%stype="radio"name="%s"value="%s"%s/></label>rn",
                                               $_title,$select,$name,$varl,$style);
                                               break;
                                       case"checkbox":
                                               if("Y"==$select)$select="checked";
                                               $outform.=sprintf("<label>%s<input%stype="checkbox"name="%s[]"value="%s"%s/></label>rn",$_title,$select,$name,$varl,$style);
                                               break;
                               }
                               $select=null;
                       }
               }
               //下拉选择
               if($type=="select")$outform=sprintf("<selectname="%s"%s>%s</select>",$name,$style,$outform);
               returnsprintf("<dt>%s</dt><dd>%s<ttid="J%s"></tt></dd>rn",$titarray[0],$outform,$name);
       }
       /**
        *表单验证及全部ck_类函数
        */
       privatefunctionck_split($standard,$name,$title,$find,$error)
       {
               // 非必填缺省跳过
               if(eregi("N",$find)&&emptyempty($this->post[$name]))returnfalse;
               //必填缺省检测
               if(eregi("Y",$find)&&emptyempty($this->post[$name]))return"["J{$name}","$error"],";
               $t_error=null;
               //多项检测
               $arr=explode(",",$standard);
               //POST数据检测
               if(!emptyempty($arr))foreach($arras$var)
               {
                       if(trim($var)!="")
                       {
                               switch($this->post)
                               {
                                       caseis_array($this->post[$name]):
                                               //数组类的检测
                                               foreach($this->post[$name]as$_var)
                                               {
                                                       $t_error.=($this->ck_open($_var,trim($var)))?"":$error;
                                                       if($t_error)break;
                                               }
                                               break;
                                       default:
                                               $t_error.=($this->ck_open($this->post[$name],trim($var)))?"":$error;
                                               break;
                               }
                               if($t_error)break;
                       }
               }
               return($t_error)?"["J{$name}","$t_error"],":"";
       }
       //函数调用
       privatefunctionck_open($string,$str)
       {
               $functi=$this->ck_detected($str);
               return($this->$functi($string,$str))?true:false;
       }
       //类型判断
       privatefunctionck_detected($str)
       {
               $detect=(eregi("^[a-zA-Z]*$",$str))?"{$str}Detect":"lengthDetect";
               if(!in_array($detect,$this->array["class"]))
               {
                       location("index.php",$ck,"Lackoffunction!!!");
               }
               return$detect;
       }
       //-------------------------------------以下为检测函数可外部调用
       //长度
       publicfunctionlengthDetect($string,$str){
               $len=split("-",trim($str));
               return(strlen($string)>($len[0]-1)&&strlen($string)<($len[1]+1))?true:false;
       }
       //价格
       publicfunctionmoneyDetect($str){
               returnpreg_match("/^(-|+)?d+(.d+)?$/",$str);
       }
       //邮件
       publicfunctionemailDetect($str){
               returnpreg_match("/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/",$str);
       }
       //网址
       publicfunctionurlDetect($str){
               returnpreg_match("/^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&_~`@[]":+!]*([^<>"])*$/",$str);
       }
       //数字型
       publicfunctionnumDetect($str){
               returnis_numeric($str);
       }
       //中文
       publicfunctioncnDetect($str){
               returnpreg_match("/^[x7f-xff]+$/",$str);
       }
       //字母
       publicfunctionenDetect($str){
               returnpreg_match("/^[A-Za-z]+$/",$str);
       }
       //数字字母混合
       publicfunctionnumenDetect($str){
               returnpreg_match("/^([a-zA-Z0-9_-])+$/",$str);
       }
       //电话号码
       publicfunctiontelDetect($str){
               returnereg("^[+]?[0-9]+([xX-][0-9]+)*$",$str);
       }
       //敏感词
       publicfunctionkeyDetect($str){
               return(!preg_match("/$badkey/i",$str));
       }
       //-----------------------------------------------------输出
       //字符替换
       publicfunctionck_filter($str){
               $str=(is_array($str))?implode(",",$str):$str;
               $str=nl2br($str);//将回车替换为<br>
               $str=htmlspecialchars($str);//将特殊字元转成HTML格式。
               //$str=str_replace(array(" ","<?"),array("","<?"),$str);//替换空格替换为
               return$str;
       }
       //转义
       functionck_escape($str)
       {
               if(!get_magic_quotes_gpc())returnaddslashes($str);
               return$str;
       }
       //MD5加密
       publicfunctionck_md5($str){
               return MD5($str);
       }
       //base64加密
       publicfunctionck_base64($str){
               return base64_encode($str);
       }
       //时间
       functionck_time($str){
               //time_r()来在公用函数文件
               if(!is_numeric($str))
               {
                       returntime_r($str);
               }
               elsereturn$str;
       }
       //有条件注销(数字)
       publicfunctionck_cancel($str){
               return(!is_numeric($str))?$str:"";
       }
       //无条件注销
       publicfunctionck_delete(){
               returnnull;
       }
       //js错误提示
       privatefunctionjsError()
       {
               if(emptyempty($this->error))returnfalse;
               return "
               <script language=javascript>rnvarerror=newArray(".trim($this->error,",").");
                       rnfor(i=0;i<error.length;i++){
                       rndocument.getElementById(error[0]).innerHTML=error[1];
                        }rn</script>
               ";
       }
}
 
//演示:
$form[1]=array(
"text"=>array("title","","产品名称","size=40","产品名称不可缺少!","Y","cn,1-30"),
"text1"=>array("categories","","产品名称","","","Y_base64"),
"select"=>array("superiors","||1|2|Y_3","产品类别|选择|1|2|3","","必选项","Y"),
"radio"=>array("superiors1","|1|Y_2|3","产品xun|产品1|产品2|产品3","","必选项","Y"),
"checkbox"=>array("superiors2",array(1=>"11",2=>"22",3=>"33"),"","","必选项","Y"),
"file"=>array("ddd","","文件"),
);
$form=array(
 "login"=> 
 array(
   "text"=> 
   array(
     0=>"user",
     1=>"",
     2=>"用户名",
     3=>"size=20",
     4=>"!",
     5=>"Y",
     6=>"numen,6-12",
   ),
   "password"=> 
   array(
     0=>"pass",
     1=>"",
     2=>"密码",
     3=>"size=22",
     4=>"密码格式错误!",
     5=>"Y_md5",
     6=>"numen,6-12",
   ),
   "radio"=> 
   array(
     0=>"time",
     1=>"|7200|3600|1800",
     2=>"cookies有效时间|2小时|1小时|30分钟",
     3=>"",
     4=>"",
     5=>"N_delete",
     6=>"",
   ),
 ),
 );
 
//表单提交效验
$past=$_form->postForm($form["login"]);
$dd=array("title"=>"标题","categories"=>"类别");
//$dd为已有的信息(如更新时的信息输出)POST数据位内部处理具有优先权
if(!emptyempty($past))
{
       echo"<pre>";
       print_r($past);
       echo"</pre>";
}
echo"<formmethod="POST"NAME="PostTopic"action=""enctype="multipart/form-data"style="margin:0px;">";
echo$_form->formHtml($form["login"],$dd);
echo"<inputtype="submit"value="Y"name="B1"></form>";

希望本文所述对大家的PHP程序设计有所帮助。