$_REQUEST 된 값을 일괄 trim() 처리하거나 addslashes() 하려고 만들었습니다.
user_function() 을 만들어서 값들의 유효성 검사나 기타 디테일한 필터링이 가능합니다.
array_filter() 라는 PHP 함수로 비슷한 효과를 보려 했는데, 잘 되지 않더군요. 왜인지는 모르겠습니다.
정리하자면,
1. 리크루시브 함으로서 x차원의 배열을 모두 적용할 수 있다.
2. 필터링용 함수를 x개 지정할 수 있으며, 순차적으로 실행된다.
/* $arr 배열의 모든 값을 ,로 구분된 $funcs 함수목록으로 필터링한다.
----------------------------------------------------------------
$arr = 필터링이 필요한 배열
$funcs = ','로 구분된 함수목록 (예: "trim,addslashes,urlencode,md5,[기타펑션]")
*/
function Q_array_filter($arr, $funcs) {
$funcs_arr = explode(',', $funcs);
if(!$func_cnt = count($funcs_arr)) return false;
foreach ($arr as $key => $val) {
if (is_array($arr[$key])) {
$arr[$key] = Q_array_filter($arr[$key], $funcs);
} else {
for ($i=0; $i<$func_cnt; $i++) {
if (!function_exists($funcs_arr[$i])) continue;
$func = $funcs_arr[$i];
$arr[$key] = $func($val);
}
}
}
return $arr;
}
다음은 특정 다차원 배열을 Q_array_filter($arr, 'trim,stripslashes,urlencode') 처리하기 전과 후의 모습입니다.
-------------------------------------------------------------------------
dbg output
Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
)
)
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[1] => Array
(
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
)
)
)
)
dbg output2
Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
)
)
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[1] => Array
(
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
)
)
)
)
user_function() 을 만들어서 값들의 유효성 검사나 기타 디테일한 필터링이 가능합니다.
array_filter() 라는 PHP 함수로 비슷한 효과를 보려 했는데, 잘 되지 않더군요. 왜인지는 모르겠습니다.
정리하자면,
1. 리크루시브 함으로서 x차원의 배열을 모두 적용할 수 있다.
2. 필터링용 함수를 x개 지정할 수 있으며, 순차적으로 실행된다.
/* $arr 배열의 모든 값을 ,로 구분된 $funcs 함수목록으로 필터링한다.
----------------------------------------------------------------
$arr = 필터링이 필요한 배열
$funcs = ','로 구분된 함수목록 (예: "trim,addslashes,urlencode,md5,[기타펑션]")
*/
function Q_array_filter($arr, $funcs) {
$funcs_arr = explode(',', $funcs);
if(!$func_cnt = count($funcs_arr)) return false;
foreach ($arr as $key => $val) {
if (is_array($arr[$key])) {
$arr[$key] = Q_array_filter($arr[$key], $funcs);
} else {
for ($i=0; $i<$func_cnt; $i++) {
if (!function_exists($funcs_arr[$i])) continue;
$func = $funcs_arr[$i];
$arr[$key] = $func($val);
}
}
}
return $arr;
}
다음은 특정 다차원 배열을 Q_array_filter($arr, 'trim,stripslashes,urlencode') 처리하기 전과 후의 모습입니다.
-------------------------------------------------------------------------
dbg output
Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
)
)
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
[1] => Array
(
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http://127.0.0.1/qblo/
[site_title] => \'\'큐블로임다\"
[webmaster_email] => master@email---.com
)
)
)
)
dbg output2
Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
)
)
[1] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
[1] => Array
(
[0] => Array
(
[http_charset] => euc-kr
[language] => default
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22
[webmaster_email] => master%40email---.com
)
)
)
)
001 |
$_REQUEST
된 값을 일괄 trim() 처리하거나 addslashes () 하려고 만들었습니다. |
002 |
user_function() 을 만들어서 값들의 유효성 검사나 기타 디테일한 필터링이 가능합니다. |
003 |
array_filter () 라는 PHP 함수로 비슷한 효과를 보려 했는데, 잘 되지 않더군요. 왜인지는 모르겠습니다. |
004 |
005 |
정리하자면, |
006 |
007 |
1. 리크루시브 함으로서 x차원의 배열을 모두 적용할 수 있다. |
008 |
2. 필터링용 함수를 x개 지정할 수 있으며, 순차적으로 실행된다. |
009 |
010 |
/* $arr 배열의 모든 값을 ,로 구분된 $funcs 함수목록으로 필터링한다. |
011 |
---------------------------------------------------------------- |
012 |
$arr = 필터링이 필요한 배열 |
013 |
$funcs = ','로 구분된 함수목록 (예: "trim,addslashes,urlencode,md5,[기타펑션]") |
014 |
*/ |
015 |
function
Q_array_filter( $arr , $funcs ) { |
016 |
|
017 |
$funcs_arr
= explode ( ',' , $funcs ); |
018 |
if (! $func_cnt
= count ( $funcs_arr )) return
false; |
019 |
020 |
foreach
( $arr
as
$key
=> $val ) { |
021 |
if
( is_array ( $arr [ $key ])) { |
022 |
$arr [ $key ] = Q_array_filter( $arr [ $key ], $funcs ); |
023 |
} else
{ |
024 |
for
( $i =0; $i < $func_cnt ; $i ++) { |
025 |
if
(!function_exists( $funcs_arr [ $i ])) continue ; |
026 |
$func
= $funcs_arr [ $i ]; |
027 |
$arr [ $key ] = $func ( $val ); |
028 |
} |
029 |
} |
030 |
} |
031 |
return
$arr ; |
032 |
} |
033 |
034 |
035 |
다음은 특정 다차원 배열을 Q_array_filter( $arr , 'trim,stripslashes,urlencode' ) 처리하기 전과 후의 모습입니다. |
036 |
------------------------------------------------------------------------- |
037 |
dbg output |
038 |
Array |
039 |
( |
040 |
[http_charset] => euc-kr |
041 |
[language] => default |
042 |
[root_url] => http: //127.0.0.1/qblo/ |
043 |
[site_title] => \'\'큐블로임다\" |
044 |
[webmaster_email] => master@email---.com |
045 |
[0] => Array |
046 |
( |
047 |
[http_charset] => euc-kr |
048 |
[language] => default |
049 |
[root_url] => http: //127.0.0.1/qblo/ |
050 |
[site_title] => \'\'큐블로임다\" |
051 |
[webmaster_email] => master@email---.com |
052 |
[1] => Array |
053 |
( |
054 |
[http_charset] => euc-kr |
055 |
[language] => default |
056 |
[root_url] => http: //127.0.0.1/qblo/ |
057 |
[site_title] => \'\'큐블로임다\" |
058 |
[webmaster_email] => master@email---.com |
059 |
) |
060 |
061 |
) |
062 |
063 |
[1] => Array |
064 |
( |
065 |
[http_charset] => euc-kr |
066 |
[language] => default |
067 |
[root_url] => http: //127.0.0.1/qblo/ |
068 |
[site_title] => \'\'큐블로임다\" |
069 |
[webmaster_email] => master@email---.com |
070 |
[1] => Array |
071 |
( |
072 |
[0] => Array |
073 |
( |
074 |
[http_charset] => euc-kr |
075 |
[language] => default |
076 |
[root_url] => http: //127.0.0.1/qblo/ |
077 |
[site_title] => \'\'큐블로임다\" |
078 |
[webmaster_email] => master@email---.com |
079 |
) |
080 |
081 |
) |
082 |
083 |
) |
084 |
085 |
) |
086 |
087 |
088 |
dbg output2 |
089 |
Array |
090 |
( |
091 |
[http_charset] => euc-kr |
092 |
[language] => default |
093 |
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F |
094 |
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22 |
095 |
[webmaster_email] => master%40email---.com |
096 |
[0] => Array |
097 |
( |
098 |
[http_charset] => euc-kr |
099 |
[language] => default |
100 |
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F |
101 |
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22 |
102 |
[webmaster_email] => master%40email---.com |
103 |
[1] => Array |
104 |
( |
105 |
[http_charset] => euc-kr |
106 |
[language] => default |
107 |
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F |
108 |
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22 |
109 |
[webmaster_email] => master%40email---.com |
110 |
) |
111 |
112 |
) |
113 |
114 |
[1] => Array |
115 |
( |
116 |
[http_charset] => euc-kr |
117 |
[language] => default |
118 |
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F |
119 |
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22 |
120 |
[webmaster_email] => master%40email---.com |
121 |
[1] => Array |
122 |
( |
123 |
[0] => Array |
124 |
( |
125 |
[http_charset] => euc-kr |
126 |
[language] => default |
127 |
[root_url] => http%3A%2F%2F127.0.0.1%2Fqblo%2F |
128 |
[site_title] => %5C%27%5C%27%C5%A5%BA%ED%B7%CE%C0%D3%B4%D9%5C%22 |
129 |
[webmaster_email] => master%40email---.com |
130 |
) |
131 |
132 |
) |
133 |
134 |
) |
135 |
|
136 |
|
참고 : array_walk_recursive 함수
''.' Programs > PHP' 카테고리의 다른 글
PHP 에서 ping 체크 .. (0) | 2012.09.25 |
---|---|
[PHP] 날짜 분, 초 차이 구하기. (0) | 2012.09.03 |
[PHP] 리다이렉션 (페이지이동) 3가지 방법 (1) | 2012.07.04 |
PHP의 배열 [연관배열] (2) | 2012.07.04 |
[PHP] 키와 밸류 값으로 배열 위치 찾기. (0) | 2012.07.03 |