주소가 http://hbuilder.com/first/product0/third/lists/page/1/?q=nos&nn=3 일 경우(쿼리스트링이 있을 경우)
Array ( [0] => first [1] => product0 [2] => third [3] => lists [4] => page [5] => 1 [6] => q [7] => nos [8] => nn [9] => 3 )
형태로 반환을 해줍니다.
일반적인 형태의 주소뿐만 아니라 쿼리스트링까지 들어있는 경우도 처리가 가능하도록 했습니다.
function segment_explode($seg) { //세크먼트 앞뒤 '/' 제거후 uri를 배열로 반환
$len = strlen($seg);
if(substr($seg, 0, 1) == '/') {
$seg = substr($seg, 1, $len);
}
$len = strlen($seg);
if(substr($seg, -1) == '/') {
$seg = substr($seg, 0, $len-1);
}
$seg_exp1 = explode("/", $seg);
//쿼리스트링을 $seg_ext와 동일한 형태의 배열로 반환
if($_SERVER["QUERY_STRING"]){
$s_arr=array();
$strings = explode("&", $_SERVER["QUERY_STRING"]);
foreach ($strings as $strs) {
$a_arr = explode("=", $strs);
foreach ($a_arr as $atrs) {
array_push($s_arr, $atrs);
}
}
//맨끝 쿼리스트링 제거
array_pop($seg_exp1);
//쿼리스트링을 제거한 배열과 쿼리스트링을 배열화한 것을 합쳐서 반환
$seg_exp = array_merge($seg_exp1, $s_arr);
} else {
$seg_exp = $seg_exp1;
}
return $seg_exp;
}
참고로 기존 주소와 쿼리스트링의 복합적인 형태를 사용하시려면 config.php 파일에서
$config['uri_protocol'] = "AUTO"; //기본
$config['uri_protocol'] = "REQUEST_URI"; //쿼리스트링과 복합사용
uri_protocol을 AUTO 에서 REQUEST_URI 로 바꿔주시면 됩니다.
활용편
위와 같이 주소를 배열로 바꾸고 나서 쿼리스트링 또는 주소쌍에 대응하는 값을 가져오고자 할 경우
(page/1 또는 ?q=nos) 다음 함수를 호출하여 사용하면 됩니다.
echo url_explode($seg_ext, 'q');
결과는 nos 를 화면에 뿌려줍니다.
/**
* url중 키값을 구분하여 값을 가져오도록
* author 우기파파
* @param Array $url : segment_explode 한 url값
* @param String $key : 가져오려는 값의 key
* @return String $url[$k] : 리턴값
*/
function url_explode($url,$key){
for($i=0; count($url)>$i; $i++ ){
if($url[$i] ==$key){
$k = $i+1;
return $url[$k];
}
}
}
|