input_filter.php 는 GET 이나 POST 로 전송된 요소를 검증(또는 필터링)하는 함수입니다.
_SERVER 전역 변수 필터링이 필요한 경우는 globals_filter.php 를 사용하십시오.

input filter 에서 필요한 library 는 다음과 같습니다.

  1. input_filter.php
    비밀번호나 프로파일, 회원 가입, 로그 인 등 POST 나 GET 으로 전송된 요소를 검증(또는 필터링)합니다.

환경 설정

공통 상수

  • HABONYPHP_DIRNAME
    						
    input_filter 가 설치된 경로. 끝에 반드시 / 를 입력해 주세요.
    
    기본값: ./
  • HABONYPHP_ENCODING
    						
    페이지 언어설정
    
    기본값: UTF-8

PHP_FORM_INPUT_Confirmation( filter, input [, method] [, replace])

    인수:
  • filter: 검증(또는 필터할) 배열 목록
  • input: 필터링된 변수 배열
  • method: _GET, _POST, _COOKIE, 일반 변수를 검증.
    • _POST => null
    • _GET : true 나 'get' 문자열
    • _COOKIE : 'cookie' 문자열
    • 일반 변수 : 'var' 문자열
  • replace: 필드 대체 문자 반환 배열 목록

				 
$u = array(
	"필드 이름" => array(
		true,
		'alnum',
		'strlen' => array('min'=>9, 'max'=>15)
	)
);
$e = PHP_FORM_INPUT_Confirmation( $u, $input, true );
$e = array(
	 [필드 이름] => array(
		code, // 에러 번호
		message, // 에러 메시지
		array(min, max) // 범위
	)
);

    반환 값:
  • code: 에러 번호
  • message: 에러 메시지
  • array(min, max): 범위 지정시 배열 값

기본적인 코드는 다음과 같습니다.

					
<form enctype="multipart/form-data" action="" method="POST">
	현재 비밀 번호<input type="text" name="u_pass" value="" /><br />
	새로운 비밀 번호<input type="text" name="n_pass" value="" /><br />
	새로운 비밀 번호 검증<input type="text" name="c_pass" value="" /><br />
	<input type="submit" value="전송" />
</form>

<?php
$filter = array(
	"u_pass" => array(
		true,
		'alnum',
		'strlen' => array('min'=>9)
	),
	"n_pass" => array(
		true,
		'alnum',
		'strlen' => array('min'=>9),
		'not_match_field' => 'c_pass'
	),
	"c_pass" => array(
		true,
		'alnum',
		'remove'
	)
);
$e = PHP_FORM_INPUT_Confirmation( $filter, $input );
if($e)
{
	print_r($e);
}
else
{
	print_r($input);
}

?>

사용자 정의 에러 코드는 다음과 같은 형식입니다.

					
$err = PHP_FORM_INPUT_Confirmation( $filter, $input );
if(is_array($err))
{
	$e = array(
		100 => ' 필수 항목입니다.',
		105 => ' 영문자, 숫자만 허용합니다.',
		108 => ' 문자 길이는 ',
		202 => ' 두 개의 비밀번호가 일치하지 않습니다.'
	);
	$msg = array();
	foreach($err as $q=>$w)
	{
		foreach($w as $n)
		{
			if(is_array($n['range']))
			{
				$raw[$q] = $q . $e[$n['code']] . $n['range']['min']. ' 이상입니다.';
			}
			else
			{
				$raw[$q] = $q . $e[$n['code']];
			}
		}
	}
}
print_r($raw);

사용할 수 있는 필터링 목록

  • true: 필수 항목 지정
    					
    array(
    	'code'=>100,
    	'message'=>'Please enter the required fields.'
    );
  • strip_tags: HTML 태그를 제거 후 빈 변수이면 에러
    					
    array(
    	'code'=>301,
    	'message'=>'Tags are not allowed.'
    );
  • callback: 콜백 함수를 지정합니다.
    strtoupper 을 입력하면 대상 변수를 대문자로 변경합니다.
    Ex. array('callback' => 'strtoupper');
  • 4. email: 정상적인 이메일 주소가 아니면 에러
    					
    array(
    	'code'=>101,
    	'message'=>'This email is not valid.'
    ):
  • url: 정상적인 URL 주소가 아니면 에러
    					
    array(
    	'code'=>102,
    	'message'=>'This url is not valid.'
    );
  • img: 정상적인 이미지 URL 주소가 아니면 에러
    					
    array(
    	'code'=>103,
    	'message'=>'This image url is not valid.'
    );
  • number: 정수가 아니면 에러
    					
    array(
    	'code'=>104,
    	'message'=>'This integer is not valid.'
    );
  • alnum: 문자, 숫자가 아니면 에러
    					
    array(
    	'code'=>105,
    	'message'=>'Valid only alphabet and numbers.'
    );
  • float: 부동 소수점이 아니면 에러
    					
    array(
    	'code'=>106,
    	'message'=>'This floating is not valid.'
    );
  • range: 숫자 지정 범위에 있지 않으면 에러
    Ex. array('range' => array('min'=>9, 'max'=>15) );
    					
    array(
    	'code'=>107,
    	'message'=>"Between ".$w['min']." ~ ".$w['max']." numbers will be accepted.",
    	'range'=>array(
    		'min'=>$w['min'],
    		'max'=>$w['max']
    	)
    );
  • strlen: 문자 길이 검증
    Ex. array('strlen' => array('min'=>9, 'max'=>15, 'charset'=>'EUC-KR' ) );
    					
    array(
    	'code'=>108,
    	'message'=>"Is allowed between words ".$w['min']." ~ ".$w['max']." characters.",
    	'range'=>array(
    		'min'=>$w['min'],
    		'max'=>$w['max']
    	)
    );
  • hyphen_number: 전화번호 검증. 0-9 와 – 외의 문자가 포함하면 에러
    					
    array(
    	'code'=>109,
    	'message'=>'0-9, - only will be accepted.'
    );
  • regexp: 사용자 정의 정규 표현식.
    Ex. array('regexp' => "/([0-9]+)/");
    					
    array(
    	'code'=>200,
    	'message'=>'Something went wrong on the field.'
    );
  • match_field: 두 개의 필드가 일치하면 에러
    Ex. array('match_field' => '대상 필드');
    					
    array(
    	'code'=>201,
    	'message'=>'The two fields are the match.'
    );
  • not_match_field: 두 개의 필드가 일치하지 않으면 에러
    Ex. array('not_match_field' => '대상 필드');
    					
    array(
    	'code'=>202,
    	'message'=>'Does not match the two fields.'
    );
  • ip: 정상적인 IP 가 아니면 에러
    					
    array(
    	'code'=>203,
    	'message'=>'Is not a valid ip.'
    );
  • min: 체크 박스(또는 기타 배열) 최소 선택(또는 입력) 수
    					
    array(
    	'code'=>204,
    	'message'=>'Please select ' . $w . ' or more mandatory field.',
    	'range'=>array(
    		'min'=>$w
    	)
    );
  • html_tags: HTML 태그를 허용합니다.
    이 값을 설정하면 HTML 태그는 필터링하지 않습니다.
  • xss_tags: HTML 은 허용하되 문제되는 태그를 치환합니다.
    <script>, <iframe> 같은 문제되는 태그만 필터링합니다.
  • combin: 배열을 문자열로 조합니다.
    Ex. array('combin' => '조합 문자');
  • remove: 필드를 제거합니다.
  • default: 기본 값을 지정합니다.
    Ex. array('default' => '설정할 값');

Example #1

기본적인 작성 예입니다.

						
<form enctype="multipart/form-data" action="" method="POST">
	<input type="hidden" name="u_id" value="" />
	<input type="text" name="u_name" value="" /><br />
	<input type="text" name="u_email" value="" /><br />
	<input type="text" name="u_pass" value="" /><br />
	<input type="text" name="n_pass" value="" /><br />
	<input type="submit" value="전송" />
</form>

<pre>
<?php
require_once(dirname(__FILE__) . '/input_filter.php');

$u = array(
	// 필터할 값을 지정하지 않았으므로 "할당"만 합니다.
	'u_id',
	// u_name 필드에 필수항목, 문자열 4~15인 길이, html 태그를 필터합니다.
	'u_name' => array(
		true,
		'strlen' => array('min' => 4, 'max' => 15),
		'strip_tags'
	),
	// u_email 필드에 필수항목, 이메일 검증을 합니다.
	'u_email' => array(
		true,
		'email'
	),
	// u_pass 필드에 필수항목, 문자열 최소 9길이, n_pass 필드와 일치 여부 검증합니다.
	'u_pass' => array(
		true,
		'alnum',
		'strlen' => array('min' => 9),
		'not_match_field' => 'n_pass'
	),
	// n_pass 필드에 필수항목, 문자열 검증 후 필드를 제거합니다.
	'n_pass' => array(
		true,
		'alnum',
		'remove'
	)
);

$e = false;
if(false === ($e = PHP_FORM_INPUT_Confirmation($u, $input)) )
{
	// 주어진 필드에 오류가 없으면 작성할 곳
	print_r($input);
}
if(is_array($e))
{
	// 오류가 있으면 출력합니다.
	print_r($e);
}

?>

Example #2

일반 변수의 값을 검증하는 방법입니다.

						
<pre>
<?php
require_once(dirname(__FILE__) . '/input_filter.php');

// 일반 변수를 검증합니다.
$input['u_name'] = 'habony php';
$input['u_email'] = 'habony';


$u = array(
	// 필터할 값을 지정하지 않았으므로 "할당"만 합니다.
	'u_id',
	// u_name 필드에 필수항목, 문자열 4~15인 길이, html 태그를 필터합니다.
	'u_name' => array(
		true,
		'strlen' => array('min' => 4, 'max' => 15),
		'strip_tags'
	),
	// u_email 필드에 필수항목, 이메일 검증을 합니다.
	'u_email' => array(
		true,
		'email'
	),
	// u_pass 필드에 필수항목, 문자열 최소 9길이, n_pass 필드와 일치 여부 검증합니다.
	'u_pass' => array(
		true,
		'alnum',
		'strlen' => array('min' => 9),
		'not_match_field' => 'n_pass'
	),
	// n_pass 필드에 필수항목, 문자열 검증 후 필드를 제거합니다.
	'n_pass' => array(
		true,
		'alnum',
		'remove'
	)
);

$e = false;
if(false === ($e = PHP_FORM_INPUT_Confirmation($u, $input, 'var')) )
{
	// 주어진 필드에 오류가 없으면 작성할 곳
	print_r($input);
}
if(is_array($e))
{
	// 오류가 있으면 출력합니다.
	print_r($e);
}

?>

Example #3

UTF-8 포맷 페이지에서 이름에 한글이 포함될 경우 EUC-KR 로 길이를 검증하는 예입니다.
'charset' 을 생략하면 기본 'UTF-8' 로 검증됩니다.

						
<form enctype="multipart/form-data" action="" method="POST">
	<input type="text" name="name" value="" />
	<input type="text" name="my_email" value="" />
	<input type="submit" value="전송" />
</form>

<pre>
<?php
require_once(dirname(__FILE__) . '/input_filter.php');

$u = array(
	'name' => array(
		true,
		'strlen' => array('min'=>4, 'max'=>15, 'charset'=>'EUC-KR'),
		'strip_tags'
	)
);

$e = false;
if(false !== ($e = PHP_FORM_INPUT_Confirmation($u, $input)) )
{
	print_r($e);
}
print_r($input);

?>

Example #4

필터링 목록에서 combin 을 이용해 이메일을 검증하는 예입니다.

						
<form enctype="multipart/form-data" action="" method="POST">
	<input type="text" name="name" value="" />
	<input type="text" name="my_email[]" value="" />@<input type="text" name="my_email[]" value="gmail.com" />
	<input type="submit" value="전송" />
</form>

<pre>
<?php
require_once(dirname(__FILE__) . '/input_filter.php');

$u = array(
	'name' => array(
		true,
		'strlen' => array('min'=>4, 'max'=>15),
		'strip_tags'
	),
	'my_email' => array(
		true,
		'combin' => '@',
		'email'
	),
);

$e = false;
if(false !== ($e = PHP_FORM_INPUT_Confirmation($u, $input)) )
{
	print_r($e);
}
print_r($input);

?>

Example #5

체크 박스를 최소 2개 선택 하도록 검증하는 예입니다.

						
<form enctype="multipart/form-data" action="" method="POST">
	<input type="checkbox" name="tail[]" value="<cap>"> cap
	<input type="checkbox" name="tail[]" value="zag"> zag
	<input type="checkbox" name="tail[]" value="tail"> tail
	<input type="submit" value="전송" />
</form>

<pre>
<?php
require_once(dirname(__FILE__) . '/input_filter.php');

$u = array(
	'tail' => array(
		true,
		'min' => 2
	)
);

$e = false;
if(false !== ($e = PHP_FORM_INPUT_Confirmation($u, $input)) )
{
	print_r($e);
}
print_r($input);

?>

개별적으로 사용할 수 있는 함수

  • 이메일 검증. (반환 값: true 나 false)
    PHP_FORM_Email_Confirmation( email );
  • URL 검증. (반환 값: true 나 false)
    PHP_FORM_URL_Confirmation( url );
  • 이미지 URL 검증. (반환 값: true 나 false)
    PHP_FORM_Image_URL_Confirmation( img );
  • IP 검증. (반환 값: true 나 false)
    PHP_FORM_IP_Confirmation( ip );
  • 문자와 숫자 검증. (반환 값: true 나 false)
    PHP_FORM_Alnum_Confirmation( str );
  • 숫자 검증. (반환 값: true 나 false)
    PHP_FORM_Interger_Confirmation( int );
  • 부동 소수점 검증. (반환 값: true 나 false)
    PHP_FORM_Float_Confirmation( int );
  • 두 개의 필드 검증. (반환 값: true 나 false)
    PHP_FORM_Two_field_Confirmation( before, after );
  • regexp 정규 표현식. (반환 값: true 나 false)
    PHP_FORM_REGEXP_Confirmation( str, regexp );
  • 문자 길이 검증. (반환 값: true 나 false)
    PHP_FORM_Length_Confirmation( str, range(min, max) [, encoding] );
  • 숫자 길이 검증. (반환 값: true 나 false)
    PHP_FORM_INT_Length_Confirmation( int, range(min, max) );
  • 문자열을 specialchars 로 치환합니다.
    PHP_FORM_Specialchars_Filter( str );
  • 문자열 magic quotes. 작은 따옴표, 큰 따옴표, 백슬래시, NULL 문자
    PHP_FORM_Magic_Quotes_Filter( str );
  • 문자열 URL 인코딩
    PHP_FORM_Encoded_Filter( str );
  • 이메일을 제외한 문자를 제거합니다.
    PHP_FORM_Email_Filter( str );
  • HTML 태그를 제거합니다. 제거 문자 < > " ‘
    PHP_FORM_Tag_Filter( str );
  • 콜백 필터. ex. strtoupper, urlencode....
    PHP_FORM_Callback_Filter( str, callback );
  • 문자열 XSS 필터. HTML 은 허용하되 문제되는 태그는 치환합니다.
    PHP_FORM_XSS_Filter( str );
  • 체크 박스(또는 기타 배열) 최소 선택(또는 입력) 수 검증. (반환 값: Array 나 false)
    PHP_FORM_Input_arrays( array, range );
  • 배열 조합. combin 인수는 조합할 문자열을 지정합니다. (반환 값: Array 나 false)
    PHP_FORM_Input_combin( array, combin );