PHP フォーム依存文字フィルタリング クラス、PHP フォーム フィルタリング_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:12:07
オリジナル
1039 人が閲覧しました

phpフォームセンシティブ文字フィルタリングクラス、phpフォームフィルタリング

この記事の例では、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)
                                                                      ケース「テキスト」:
                                                                                                                                                          " を返します
; 休憩
ケース「パスワード」:
//パスワード入力
" を返します
; 休憩
ケース '':
// 複数行のテキスト
" を返します
休憩
ケース「非表示」:
                                                                                              " を返します
; 休憩
ケース「ファイル」:
                                                                                                                                                        " を返します
; 休憩
ケース「送信」:
                                                         " を返します
                                壊す;
                        デフォルト:
                                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("rn"
                                                ,$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
%s
rn",$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(" ",'に置き換えます。 $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 '
'; echo $_form->formHtml($form['login'],$dd); echo '
';


この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。




http://www.bkjia.com/PHPjc/923907.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/923907.html

技術記事

PHP フォーム依存文字フィルタリング クラス、PHP フォーム フィルタリング この記事では、PHP フォーム依存文字フィルタリング クラスとその使用例について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです: コードをコピーします...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート