加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP编程:php表单敏感字符过滤类

发布时间:2020-12-13 02:15:13 所属栏目:PHP教程 来源:网络整理
导读:《php表单敏感字符过滤类》要点: 本文介绍了php表单敏感字符过滤类,希望对您有用。如果有疑问,可以联系我们。 PHP实战 本篇章节讲解php表单敏感字符过滤类及其用法.供大家参考研究.具体分析如下: 代码如下: /** * 表单生成验证文件 */ $_form =

《php表单敏感字符过滤类》要点:
本文介绍了php表单敏感字符过滤类,希望对您有用。如果有疑问,可以联系我们。

PHP实战本篇章节讲解php表单敏感字符过滤类及其用法.分享给大家供大家参考.具体分析如下:

代码如下:

/**
* 表单生成验证文件
*/
$_form = new formHtmlFind();
class formHtmlFind{
??????? /**
???????? * 输出表单函数
???????? * $formKey? 表单键
???????? * $infoArray 更新时的原始信息数组
???????? */
?
??????? public function formHtml($array,$infoArray='')
??????? {
??????????????? // 检测数组是否存在
??????????????? if(emptyempty($array))return false;
??????????????? $newform = null;
??????????????? // 信息数组(更新信息)
??????????????? $this->infoArray = !emptyempty($infoArray)?$infoArray:array();
??????????????? $this->array['class'] =? get_class_methods(get_class());
??????????????? foreach ($array as $key =>$arr)
??????????????? {
??????????????????????? // 键值转换为纯英文
??????????????????????? $key = preg_replace("/[^a-z]/i",'',$key);
??????????????????????? // 生成表单
??????????????????????? $newform .= $this->outputForm($arr,$key);
??????????????? }
??????????????? // 输出表单
??????????????? return $newform.$this->jsError();
??????? }
??????? /**
???????? * 生成表单函数
???????? */
??????? private function outputForm($arr,$key)
??????? {
??????????????? $value = null;
??????????????? if(emptyempty($arr))return false;
??????????????? // input Type
??????????????? $type?? = $key;
??????????????? // input NAME
??????????????? $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]);
??????????????? // input Title
??????????????? $title? = trim($arr[2]);
??????????????? // 样式
??????????????? $style? = trim($arr[3]);
??????????????? if($key!=="hidden")
??????????????? {
??????????????????????? $dt = "<dt>{$title}</dt><dd>";
??????????????????????? // js错误提示
??????????????????????? $dd = "<tt id="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,$arr[1],$title,$style); // 多选类
??????? }
??????? /**
???????? * 提交数据检测
???????? */
??????? public function postForm($array)
??????? {
??????????????? // 检测数组是否存在
??????????????? if(emptyempty($array)||emptyempty($_POST))return false;
??????????????? $this->post?????????? =? $_POST;
??????????????? $this->array['class'] =? get_class_methods(get_class());
??????????????? foreach ($array as $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))
??????????????? {
??????????????????????? return false;
??????????????? }
??????????????? else return $newData;
??????? }
??????? /**
???????? * 生成表单
???????? */
??????? private function newInput($type,$title)
??????? {
??????????????? switch ($type)
??????????????? {
??????????????????????? case 'text':
??????????????????????????????? // 单行文本
??????????????????????????????? return? "<input type="text" name="{$name}" value="{$value}" {$style}/>";
??????????????????????????????? break;
??????????????????????? case 'password':
??????????????????????????????? //密码输入
??????????????????????????????? return "<input type="password" name="{$name}" {$style}/>";
??????????????????????????????? break;
??????????????????????? case '':
??????????????????????????????? //多行文本
??????????????????????????????? return "<textarea name="{$name}" {$style}/>{$value}</textarea>";
??????????????????????????????? break;
??????????????????????? case 'hidden':
??????????????????????????????? // 暗藏
??????????????????????????????? return "<input type="hidden" name="{$name}" value="{$value}" {$style}/>";
??????????????????????????????? break;
??????????????????????? case 'file':
??????????????????????????????? // 文件上传
??????????????????????????????? return "<input type= "file"name="{$name}" {$style}/>";
??????????????????????????????? break;
??????????????????????? case 'submit':
??????????????????????????????? // 提交
??????????????????????????????? return "<input type="submit" name="{$name}" value="$value" $style}/>";
??????????????????????????????? break;
??????????????????????? default:
??????????????????????????????? return "{$type}类型错误!!!";
??????????????????????????????? break;
??????????????? }
??????? }
??????? /**
???????? * 提交信息检测
???????? * 错误返回error
???????? */
??????? private function postFind($arr,$key)
??????? {
??????????????? if(emptyempty($arr))return false;
??????????????? $name = $title =$error =$find =$standard =null;
??????????????? // input NAME
??????????????? $name???? = trim($arr[0]);
??????????????? // input Title
??????????????? $title??? = trim($arr[2]);
??????????????? // 错误提示
??????????????? $error??? = trim($arr[4]);
??????????????? // 检测类型 Y N
??????????????? $find???? = trim($arr[5]);
??????????????? // 检测标准
??????????????? $standard = trim($arr[6]);
??????????????? //
??????????????? if(!emptyempty($standard))$this->error .=$this->ck_split($standard,$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;
??????? }
??????? /**
???????? * 多选类表单生成
???????? */
??????? private function formSelect($type,$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 ($valarray as $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 %s value="%s"/>%s</option>rn"
???????????????????????????????????????????????,$select,preg_replace("/Y_/i",$varl),$_title);
??????????????????????????????????????????????? break;
??????????????????????????????????????? case 'radio':
??????????????????????????????????????????????? if('Y' == $select)$select = 'checked';
??????????????????????????????????????????????? $outform .= sprintf("<label>%s<input %s type="radio" name="%s" value="%s" %s/></label>rn",
??????????????????????????????????????????????? $_title,$varl,$style);
??????????????????????????????????????????????? break;
??????????????????????????????????????? case 'checkbox':
??????????????????????????????????????????????? if('Y' == $select)$select = 'checked';
??????????????????????????????????????????????? $outform .= sprintf("<label>%s<input %s type="checkbox" name="%s[]" value="%s" %s/></label>rn",$_title,$style);
??????????????????????????????????????????????? break;
??????????????????????????????? }
??????????????????????????????? $select =null;
??????????????????????? }
??????????????? }
??????????????? // 下拉选择
??????????????? if($type =='select')$outform = sprintf('<select name="%s" %s>%s</select>',$outform);
??????????????? return sprintf("<dt>%s</dt><dd>%s<tt id="J%s"></tt></dd>rn",$titarray[0],$outform,$name);
??????? }
??????? /**
???????? * 表单验证 及全部 ck_类函数
???????? */
??????? private function ck_split($standard,$error)
??????? {
??????????????? //? 非必填缺省跳过
??????????????? if(eregi('N',$find) && emptyempty($this->post[$name]))return false;
??????????????? // 必填缺省检测
??????????????? if(eregi('Y',$find) && emptyempty($this->post[$name]))return "["J{$name}","$error"],";
??????????????? $t_error = null;
??????????????? // 多项检测
??????????????? $arr = explode(',',$standard);
??????????????? // POST数据检测
??????????????? if(!emptyempty($arr))foreach ($arr as $var)
??????????????? {
??????????????????????? if(trim($var)!='')
??????????????????????? {
??????????????????????????????? switch ($this->post)
??????????????????????????????? {
??????????????????????????????????????? case is_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"],":"";
??????? }
??????? // 函数调用
??????? private function ck_open($string,$str)
??????? {
??????????????? $functi = $this->ck_detected($str);
??????????????? return ($this->$functi($string,$str))? true:false;
??????? }
??????? // 类型判断
??????? private function ck_detected($str)
??????? {
??????????????? $detect = (eregi("^[a-zA-Z]*$",$str))? "{$str}Detect":'lengthDetect';
??????????????? if(!in_array($detect,$this->array['class']))
??????????????? {
??????????????????????? location('index.php',$ck,' Lack of function !!!');
??????????????? }
??????????????? return $detect;
??????? }
??????? //-------------------------------------以下为检测函数可外部调用
??????? // 长度
??????? public function lengthDetect($string,$str){
??????????????? $len = split('-',trim($str));
??????????????? return (strlen($string) > ($len[0]-1) && strlen($string) < ($len[1]+1))? true:false;
??????? }
??????? // 价格
??????? public function moneyDetect($str){
??????????????? return preg_match("/^(-|+)?d+(.d+)?$/",$str);
??????? }
??????? // 邮件
??????? public function emailDetect($str){
??????????????? return preg_match("/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/",$str);
??????? }
??????? // 网址
??????? public function urlDetect($str){
??????????????? return preg_match("/^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&_~`@[]':+!]*([^<>"])*$/",$str);
??????? }
??????? // 数字型
??????? public function numDetect($str){
??????????????? return is_numeric($str);
??????? }
??????? // 中文
??????? public function cnDetect($str){
??????????????? return preg_match("/^[x7f-xff]+$/",$str);
??????? }
??????? // 字母
??????? public function enDetect($str){
??????????????? return preg_match("/^[A-Za-z]+$/",$str);
??????? }
??????? // 数字字母混合
??????? public function numenDetect($str){
??????????????? return preg_match("/^([a-zA-Z0-9_-])+$/",$str);
??????? }
??????? // 电话号码
??????? public function telDetect($str){
??????????????? return ereg("^[+]?[0-9]+([xX-][0-9]+)*$",$str);
??????? }
??????? // 敏感词
??????? public function keyDetect($str){
??????????????? return (!preg_match("/$badkey/i",$str));
??????? }
??????? //-----------------------------------------------------输出
??????? // 字符替换
??????? public function ck_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;
??????? }
??????? // 转义
??????? function ck_escape($str)
??????? {
??????????????? if (!get_magic_quotes_gpc())return addslashes($str);
??????????????? return $str;
??????? }
??????? // MD5加密
??????? public function ck_md5($str){
??????????????? return? MD5($str);
??????? }
??????? // base64加密
??????? public function ck_base64($str){
??????????????? return? base64_encode($str);
??????? }
??????? // 时间
??????? function ck_time($str){
??????????????? // time_r() 来在公用函数文件
??????????????? if(!is_numeric($str))
??????????????? {
??????????????????????? return time_r($str);
??????????????? }
??????????????? else return $str;
??????? }
??????? // 有条件注销(数字)
??????? public function ck_cancel($str){
??????????????? return (!is_numeric($str))? $str:"";
??????? }
??????? // 无条件注销
??????? public function ck_delete(){
??????????????? return null;
??????? }
??????? // js错误提示
??????? private function jsError()
??????? {
??????????????? if(emptyempty($this->error))return false;
??????????????? return? "
??????????????? <script? language=javascript> rn var error = new Array(".trim($this->error,').");
??????????????????????? rn for (i=0; i < error.length; i++){
??????????????????????? rn document.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',
'checkbox'=>array('superiors2',array(1=>'11',2=>'22',3=>'33'),
'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',
????? 2 => '密 码',
????? 3 => 'size=22',
????? 4 => '密码格式错误!',
????? 5 => 'Y_md5',
??? '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 '<form method="POST" NAME="PostTopic" action="" enctype="multipart/form-data" style="margin:0px;">';
echo $_form->formHtml($form['login'],$dd);
echo '<input type="submit" value="Y" name="B1"></form>';

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

编程之家培训学院每天发布《php表单敏感字符过滤类》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读