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程序设计有所帮助。
相关文章
- php 远程下载图片|视频
- PHP实现一言 / 随机一句功能
- 【说站】php PSR-4是什么意思
- ORM哪家强?java,c#,php,python,go 逐一对比, 网友直呼:全面客观
- PHP在MySQL中实现安全的表单提交(php表单提交mysql)
- 环境快速搭建Linux上的PHP开发环境(Linux装php)
- 安装Linux下的PHP环境(linux中安装php)
- PHP Fatal error: Uncaught Error: Call to undefined function pcntl_fork().. 开启php pcntl扩展实现多进程详解编程语言
- PHP专业连接MySQL:实现快速代码.(php连接mysql数据库代码)
- 强大的PHP环境,支持Redis全面提升效能(php支持redis)
- 快速安装配置PHP在Linux系统上(php安装配置linux)
- 程序快速学会在Linux中执行PHP程序(linux执行php)
- PHP操作MySQL数据库,实现强大的数据功能(php调用mysql数据库)
- PHP如何连接MSSQL数据库?(php连接mssql)
- 数据库解决PHP连接远程MySQL数据库的问题(php连接远程mysql)
- 简便快捷:在PHP服务器上使用MSSQL(php服务器 mssql)
- PHP连接MSSQL数据库的连接池优化(php mssql连接池)
- PHP与MSSQL的融合——开启新的编程前程(php mssql 空白)
- PHP与MySQL的关联技术(php关联mysql)
- 基于PHP的Redis队列监控实践(redis队列监控php)
- Oracle和PHP完美配合提升数据库性能(oracle php配置)
- 利用php和js实现页面数据刷新
- PHP程序员编程注意事项
- Php中用PDO查询Mysql来避免SQL注入风险的方法
- 国外十大最流行的PHP框架排名
- php中利用str_pad函数生成数字递增形式的产品编号
- php中的PHP_EOL换行符详细解析
- php使用ob_start()实现图片存入变量的方法
- php中substr()函数参数说明及用法实例
- php管理nginx虚拟主机shell脚本实例
- win764位系统配置php最新版开发环境(php+Apache+mysql)