PHP 양식 민감한 문자 필터링 class_php 기술

WBOY
풀어 주다: 2016-05-16 20:28:53
원래의
975명이 탐색했습니다.

이 기사의 예에서는 PHP 형식 감지 문자 필터링 클래스와 그 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

/**
* 양식 생성 확인 파일
*/
$_form = 새로운 formHtmlFind()
클래스 formHtmlFind{
/**
* 출력형식 기능
* $formKey 양식 키
* $infoArray 업데이트 시 원본 정보 배열
                     */

공개 함수 formHtml($array,$infoArray='')
~ // 배열이 존재하는지 감지
If(emptyempty($array))는 false를 반환합니다.
                    $newform = null
// 정보 배열(업데이트 정보)
$this->infoArray = !emptyempty($infoArray)?$infoArray:array()
$this->array['class'] = get_class_methods(get_class())
foreach($array를 $key =>$arr로)
~ // 키 값을 순수 영어로 변환
                         $key = preg_replace("/[^a-z]/i",'',$key)
// 양식 생성
$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 = 비어 있음($this->post[$name])? $value :trim($this->post[$name]);                               // 제목 입력
                 $title = 트림($arr[2])
// 스타일
                   $style = Trim($arr[3])
If($key!=="숨김")
~ $dt = "
{$title}
"
//js 오류 메시지
$dd = "
rn"
~ (!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->포스트 = $_POST; $this->array['class'] = get_class_methods(get_class())
foreach($array를 $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))
~ | ~                     그렇지 않으면 $newData를 반환합니다.
           }
/**
* 양식 생성
                     */
         비공개 함수 newInput($type,$name,$value,$style,$title)
~ 스위치($type)
~케이스 '텍스트':
// 한 줄의 텍스트
""를 반환합니다.
휴식
케이스 '비밀번호':
//비밀번호 입력
""를 반환합니다.
휴식
케이스 '':
//여러 줄의 텍스트
""를 반환합니다. 휴식
사례 '숨김':
// 숨기기
""를 반환합니다.
휴식
케이스 '파일':
>                                          ""을 반환합니다. 휴식
사례 '제출':
>                                                                ""를 반환합니다.
                                부서지다;
                        기본값:
                                "{$type}类型错误!!!"를 반환합니다.
                                부서지다;
                }
        }
        /**
* 테스트를 위한 정보 제출
* 오류는 오류를 반환합니다
                     */
        개인 함수 postFind($arr,$key)
        {
                if(emptyempty($arr))return false;
                $name = $title =$error =$find =$standard =null;
                // 이름 입력
                $name     = 트림($arr[0]);
                // 제목 입력
                $title    = 트림($arr[2]);
                // 错误提示
                $error    = 트림($arr[4]);
                // 检测类型 Y N
                $find     = 트림($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       = 분할("_", $find);
                        // 转义或过滤
                        $escape_filter = (!emptyempty($KKarray[1]))?'ck_'.$KKarray[1]:'';
                        // 출력통합법
$data ~                                                   ​
~ ~ ~        $data                               // 새로운 데이터 출력
                      $data 반환
           }
/**
* 다중 선택 양식 생성
                     */
         비공개 함수 formSelect($type,$name,$value,$title,$style)
~                     $outform = null
// 업데이트 및 커밋 작업을 트리거할 때 초기
$nowvalue = (!emptyempty($this->post[$name]))?$this->post[$name]:$this->infoarray[$name]
// 다중 선택 인식과 호환되며 배열로 변환됩니다
If(!emptyempty($nowvalue))$valueArray = 폭발(",",$nowvalue)
// 옵션 제목
If(is_array($title))
~ array_unshift($title,'선택')
$titarray = 배열_값($title)
                          }else $titarray = 폭발("|",$title)
// 옵션 값
If(is_array($value))
~ array_unshift($value,'선택')
$valarray = array_keys($값)
If(emptyempty($title))$titarray = array_values($value)
~                       else $valarray = 폭발("|",$value)
// 폼의 초기 기본값 취소
If(!emptyempty($this->post)&&!emptyempty($this->infoArray))$value = preg_replace("/Y_/i",'',$value)

foreach($valarray는 $key =>$varl)
~ // 기본이 아닌 인식
If(!emptyempty($valueArray))$select = (in_array($varl,$valueArray))?'Y':'';                        //  判断是否为默认
                        else $select   = (eregi("Y_",$varl))? '와이':'';
 
                        if($key >'0')
                        {
                                $_title=($titarray[$key])? $titarray[$key]:$제목;
                                스위치($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 =널;
                        }
                }
                // 下拉选择
                if($type =='select')$outform = sprintf('',$name,$style,$outform);
                return sprintf("
%s
%s
rn",$titarray[0], $결과,$이름);
        }
        /**
* 양식 유효성 검사 및 모든 ck_ 클래스 함수
                     */
        개인 함수 ck_split($standard,$name,$title,$find,$error)
        {
                //  비必填缺省跳过
                if(eregi('N',$find) &&empty($this->post[$name]))return false;
                // 必填缺省检测
                if(eregi('Y',$find) &&empty($this->post[$name]))return "["J{$name}","$error"],";
                $t_error = null;
                // 多项检测
                $arr = 폭발(',',$standard);
                // POST 数据检测
                if(!emptyempty($arr))foreach ($arr를 $var로)
                {
                        if(trim($var)!='')
                        {
                                스위치($this->post)
                                {
                                        케이스 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);
                ($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 = 분할('-',trim($str))
(strlen($string) > ($len[0]-1) && strlen($string) < ($len[1] 1)) true:false;            }
             // 가격
          공개 함수 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);            }
// 민감한 단어
          공개 기능 키감지($str){
                   return (!preg_match("/$badkey/i",$str))
           }
//------------------------------------------------ -----출력
// 문자 교체
공개 함수 ck_filter($str){
                    $str=(is_array($str)) implode(",",$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){
                       return base64_encode($str)
           }
             // 시간
          함수 ck_time($str){
// time_r()은 공개 함수 파일에 들어옵니다
If(!is_numeric($str))
~ 반환 시간_r($str)
~                     그렇지 않으면 $str을 반환합니다.
           }
// 조건부 취소(숫자)
공개 함수 ck_cancel($str){
(!is_numeric($str))을 반환하시겠습니까? $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 < error.length; i ){
~                                  ~                                    ";
           }
}

// 데모:
$form[1] =배열(
'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','product xun|제품 1|제품 2|제품 3','','필수 옵션','Y'),
'checkbox'=>array('superiors2',array(1=>'11',2=>'22',3=>'33'),'','','필수 옵션', 'Y'),
'파일'=>array('ddd','','파일'),
);
$form =배열(
'로그인' =>
배열(
'텍스트' => 배열(
0 => '사용자',
1 => '',
    2 => '사용자 이름',
3 => '크기=20',
4 => '!',
5 => '예',
​ 6 => '숫자,6-12',
),
'비밀번호' =>
배열(
        0 => '통과',
1 => '',
2 => '비밀번호',
3 => '크기=22',
         4 => '비밀번호 형식이 잘못되었습니다!',
5 => 'Y_md5',
​ 6 => '숫자,6-12',
),
'라디오' => 배열(
0 => '시간',
1 => '|7200|3600|1800',
        2 => '쿠키 유효 시간|2시간|1시간|30분',
3 => '',
4 => '',
5 => 'N_삭제',
​ 6 => '',
),
),
);

// 양식 제출 확인
$past = $_form->postForm($form['login'])
$dd = array('제목'=>'제목','카테고리'=>'카테고리')
// $dd는 기존 정보입니다(예: 업데이트 중 출력되는 정보). POST 데이터 비트의 내부 처리가 우선합니다.
if(!emptyempty($past))
{
echo "<사전>"
            print_r($past)
echo ""; }
echo '
'; echo $_form->formHtml($form['login'],$dd)
echo '
'



이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿