本文实例讲述了php表单敏感字符过滤类及其用法。分享给大家供大家参考。具体分析如下:
复制代码 代码如下:
/**
* 表单生成验证文件
*/
$_form = new formHtmlFind();
class formHtmlFind{
/**
* 输出表单函数
* $formKey 表单键
* $infoArray 更新时的原始信息数组
*/
public function formHtml($array,$infoArray='')
{
// 检测数组是否存在
if(emptyempty($array))return false;
$newform = null;
// 信息数组(更新信息)
$this->infoArray = !emptyempty($infoArray)"/[^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]))"hidden")
{
$dt = "<dt>{$title}</dt><dd>";
// js错误提示
$dd = "<tt id="J{$name}"></tt></dd>rn";
}
return (!preg_match("/checkbox|select|radio/i",$key))"/[^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,$name,$value,$style,$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,$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]))"";
// 输出新的数据
return $data;
}
/**
* 多选类表单生成
*/
private function formSelect($type,$name,$value,$title,$style)
{
$outform = null;
// 触发更新和提交动作时的初始
$nowvalue = (!emptyempty($this->post[$name]))",",$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_",$varl))"<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,$select,$name,$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,$select,$name,$varl,$style);
break;
}
$select =null;
}
}
// 下拉选择
if($type =='select')$outform = sprintf('<select name="%s" %s>%s</select>',$name,$style,$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,$name,$title,$find,$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))"^[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))"/^(-|+)",$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("^[+]", $str);
}
// 敏感词
public function keyDetect($str){
return (!preg_match("/$badkey/i",$str));
}
//-----------------------------------------------------输出
// 字符替换
public function ck_filter($str){
$str=(is_array($str))",",$str):$str;
$str=nl2br($str); //将回车替换为<br>
$str=htmlspecialchars($str); //将特殊字元转成 HTML 格式。
//$str=str_replace(array(" ",'<" ",'< "";
}
// 无条件注销
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','','必选项','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 '<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程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]