この記事の例では、PHP のフォーム依存文字フィルタリング クラスとその使用法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
/**
* フォーム生成検証ファイル
*/
$_form = 新しいフォームHtmlFind();
クラスフォームHtmlFind{
/**
* フォーム出力機能
* $formKey フォームキー
* $infoArray 更新時の元の情報配列
*/
パブリック関数 formHtml($array,$infoArray='')
// 配列が存在するかどうかを確認します
If(emptyempty($array)) false を返します
$newform = null;
// 情報配列(更新情報)
$this->infoArray = !emptyempty($infoArray)?$infoArray:array();
$ this-> array ['class'] =
foreach ($array as $key =>$arr)
//キー値を純粋な英語に変換します
$key = preg_replace("/[^a-z]/i",'',$key);
// formを生成します
$newform .= $this->outputForm($arr,$key);
// 出力フォーム
return $newform.$this->jsError();
}
/**
* フォーム生成機能
*/
プライベート関数outputForm($arr,$key)
$value = null;
If(emptyempty($arr)) false を返します
// 型を入力
$タイプ = $キー
// 名前を入力
// 入力初期値には複数の選択肢、単一選択肢のカテゴリは含まれません
$value = (!emptyempty($this->infoArray[$name]))?trim($this->infoArray[$name]):trim($arr[1]);
$value = emptyempty($this->post[$name]) $value :trim($this->post[$name]);
// タイトルを入力
$title = トリム($arr[2]);
// スタイル
$style = trim($arr[3]);If($key!=="非表示")
$dt = "
{$title}";
// js エラー メッセージ
$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);
}
/**
* テスト用のデータを送信します
*/
パブリック関数 postForm($array)
// 配列が存在するかどうかを確認します
If(emptyempty($array)||emptyempty($_POST)) false を返します
$ this->投稿
$ this-> array ['class'] =
foreach ($array as $key =>$arr)
//キー値を純粋な英語に変換します
$key = preg_replace("/[^a-z]/i",'',$key);
// ログアウト ファイル フォームを検出
If (!emptyempty($arr)&&'file' != $key)$newData[trim($arr[0])] = $this->postFind($arr,$key);
// 出力フォーム
If(!emptyempty($this->error))
falseを返します。
それ以外の場合は $newData を返します。
}
/**
* フォームを生成
*/
プライベート関数 newInput($type,$name,$value,$style,$title)
スイッチ ($type)
ケース「テキスト」:
"
を返します
;
休憩
ケース「パスワード」:
//パスワード入力
"
を返します
;
休憩
ケース '':
// 複数行のテキスト
"
{$value} を返します
休憩
ケース「非表示」:
"
を返します
;
休憩
ケース「ファイル」:
"
を返します
;
休憩
ケース「送信」:
"
を返します
壊す;
デフォルト:
return "{$type}类型错误!!!";
壊す;
}
}
/**
* テスト用の情報を送信します
* エラーはエラーを返します
*/
プライベート関数 postFind($arr,$key)
{
if(emptyempty($arr)) false を返します;
$name = $title =$error =$find =$standard =null;
// 名前を入力
$name = トリム($arr[0]);
// タイトルを入力
$title = トリム($arr[2]);
// 错误提案
$error = トリム($arr[4]);
// 检测型 Y N
$find = trim($arr[5]);
// 检测标準
$standard = トリム($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 = 配列();
if(preg_match("/Y|N/is",$find))
{
$KKArray = split("_", $find);
// 转义または过滤
$escape_filter = (!emptyempty($KKarray[1]))?'ck_'.$KKarray[1]:'';
// 检测を通した合法データの出力
$データ
以来
// 新しいデータを出力します
$data を返します。
}
/**
*複数選択フォームの生成
*/
プライベート関数 formSelect($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,'select');
$titarray = array_values($title);
}else $titarray =explode("|",$title);
// オプションの値
If(is_array($value))
array_unshift($value,'select');
$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;
スイッチ ($type)
{
ケース「選択」:
if('Y' == $select)$select = '選択済み';
$outform .= sprintf("
%srn"
,$select,preg_replace("/Y_/i",'',$varl),$_title);
壊す;
ケース「ラジオ」:
if('Y' == $select)$select = 'チェック済み';
$outform .= sprintf("
rn",
$_title,$select,$name,$varl,$style);
壊す;
ケース「チェックボックス」:
if('Y' == $select)$select = 'チェック済み';
$outform .= sprintf("
rn",$ _title,$select,$name,$varl,$style);
壊す;
}
$select =null;
}
}
// 下拉选择
if($type =='select')$outform = sprintf('
',$name,$style,$outform);
return sprintf("
%s%srn",$titarray[0], $outform,$name);
}
/**
* フォーム検証とすべての ck_ クラス関数
*/
プライベート関数 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 を $var として)
{
if(trim($var)!='')
{
スイッチ ($this->post)
{
case is_array($this->post[$name]):
// 数组类的检测
foreach ($this->post[$name] を $_var として)
{
$t_error.= ($this->ck_open($_var,trim($var)))?"":$error;
if($t_error)break;
}
壊す;
デフォルト:
$t_error.= ($this->ck_open($this->post[$name],trim($var)))?"":$error;
壊す;
}
if($t_error)break;
}
}
戻ります ($t_error)? "["J{$name}","$t_error"],":"";
}
//関数数调用
プライベート関数 ck_open($string,$str)
{
$functi = $this->ck_detected($str);
return ($this->$functi($string,$str))?真/偽;
}
// 型判断
プライベート関数 ck_detected($str)
$detect = (eregi("^[a-zA-Z]*$",$str)) "{$str}Detect":'lengthDetect';
If(!in_array($detect,$this->array['class']))
location('index.php',$ck,' 機能がありません !!!');
$detect を返す
}
//----------------------------------------次の検出関数は外部から呼び出すことができます
// 長さ
パブリック関数 lengthDetect($string,$str){
$len = split('-',trim($str));
戻り値 (strlen($string) > ($len[0]-1) && strlen($string) < ($len[1]+1))?
}
// 価格
パブリック関数moneyDetect($str){
return preg_match("/^(-|+)?d+(.d+)?$/",$str);
}
// メール
パブリック関数 emailDetect($str){
return preg_match("/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/", $str);
}
// URL
パブリック関数 urlDetect($str){
return preg_match("/^http://[A-Za-z0-9]+.[A-Za-z0-9]+[/=?%-&_~`@[]':+!]*( [^<>"])*$/", $str);
}
// 数値型
パブリック関数 numDetect($str){
return is_numeric($str);
}
// 中国語
パブリック関数 cnDetect($str){
return preg_match("/^[x7f-xff]+$/", $str);
}
// 文字
パブリック関数 enDetect($str){
return preg_match("/^[A-Za-z]+$/", $str);
}
// 数字と文字の組み合わせ
パブリック関数 numenDetect($str){
return preg_match("/^([a-zA-Z0-9_-])+$/",$str);
}
// 電話番号
パブリック関数 telDetect($str){
return ereg("^[+]?[0-9]+([xX-][0-9]+)*$", $str);
}
// センシティブな言葉
public function keyDetect($str){
return (!preg_match("/$badkey/i",$str));
}
//------------------------------------------------ -----アウトプット
// 文字置換
パブリック関数 ck_filter($str){
$str=(is_array($str)):$str;
$str=nl2br($str); // 改行を
に置き換えます。
$str=htmlspecialchars($str); //特殊文字を HTML 形式に変換します。
//$str=str_replace(array(" ",''),array(" ",'< ?'),$str); //スペースを
に置き換えます。
$str; を返します。
}
// 逃げる
関数 ck_escape($str)
if (!get_magic_quotes_gpc())return addedlashes($str);
$str; を返します。
}
// MD5 暗号化
パブリック関数 ck_md5($str){
MD5($str) を返します。
}
// Base64 暗号化
パブリック関数 ck_base64($str){
Base64_encode($str) を返します
}
// 時間
関数 ck_time($str){
// time_r() はパブリック関数ファイルに含まれます
If(!is_numeric($str))
time_r($str) を返します
それ以外の場合は $str を返します。
}
// 条件付きキャンセル (数値)
パブリック関数 ck_cancel($str){
return (!is_numeric($str))?
}
// 無条件ログアウト
パブリック関数 ck_delete(){
null を返します。
}
// js エラー メッセージ
プライベート関数 jsError()
If(emptyempty($this->error)) false を返します
「
」を返します
& Lt; スクリプト言語 = javascript & gt; rn var error = new array (".Trim ($ this- & gt; error, ',').");
rn for (i=0; i
";
}
}
// デモ:
$form[1] =array(
'text'=>array('title','','商品名','size=40','商品名は必須です!','Y','cn,1-30'),
'text1'=>array('カテゴリ','','製品名','','','Y_base64'),
'select'=>array('上位','||1|2|Y_3','製品カテゴリ|選択|1|2|3','','必須オプション','Y'),
'radio'=>array('superiors1','|1|Y_2|3','product xun|product 1|product 2|product 3','','必須オプション','Y'),
'checkbox'=>array('superiors2',array(1=>'11',2=>'22',3=>'33'),'','','必須オプション', 「はい」)、
'file'=>array('ddd','','file'),
);
$form =array (
'ログイン' =>
配列 (
'テキスト' =>
配列 (
0 => 'ユーザー'、
1 =>
2 => 'ユーザー名'、
3 => 'サイズ=20'、
4 =>「!」、
5 =>「Y」、
6 => '数値,6-12',
)、
'パスワード' =>
配列 (
0 => 'パス'、
1 =>
2 => 'パスワード'、
3 => 'サイズ=22'、
4 => 「パスワードの形式が間違っています!」、
5 => 'Y_md5'、
6 => '数値,6-12',
)、
「ラジオ」=>
配列 (
0 => '時間'、
1 => '|7200|3600|1800'、
2 => 'Cookie の有効時間|2 時間|1 時間|30 分'、
3 =>
4 =>
5 => 'N_削除'、
6 => ''、
)、
)、
);
// フォーム送信の検証
$past = $_form->postForm($form['login']);
$dd = array('title'=>'タイトル','categories'=>'カテゴリ');
// $dd は既存の情報(更新時に出力される情報など)です。POST データビットの内部処理が優先されます
if(!emptyempty($past))
{
echo "
";
print_r($past) <br>
echo "
";
}
echo '
';
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
http://www.bkjia.com/PHPjc/923907.html
www.bkjia.com
true
PHP フォーム依存文字フィルタリング クラス、PHP フォーム フィルタリング この記事では、PHP フォーム依存文字フィルタリング クラスとその使用例について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです: コードをコピーします...