인터넷정보

주소줄(REQUEST_URI)의 인수를 새로 설정하기

알 수 없는 사용자 2007. 10. 17. 18:55
add_args.php

<? 
# 주소의 인수를 새 값으로 적용하여 리턴 
#:인수: 
# URL: $_SERVER["REQUEST_URI"] 또는  주소에 ? 인수가 첨가된 문자열 
# args: 새로 적용할 인수들로 이뤄진 배열 
# need_null: 빈값의 인수도 지우지 않고 유지하려면 1을 넘겨라 
#:제한사항: 새 인수들은 1차원 배열로만 정의되므로 원래 인수가 배열이면 처리 못한다 

function add_args_url ($URL, $args, $need_null=0

 
$pos= strpos($URL,'?'); 
  if (!
$pos) return $URL

 
$arr_parse = parse_url($URL); 
 
$new_query= add_args_query ($arr_parse["query"], $args, $need_null); 

 
$addr= substr($URL,0,$pos); 
  if(
$new_query
    return
$addr.'?'.$new_query
  else 
    return
$addr


# 주소에서 ? 문자 뒷부분(query)을 인수로 받아서 새 값을 적용한 후 리턴 

function add_args_query ($query, $args, $need_null

 
$ARR = array(); 
 
parse_str($query, $arr_query); 
 
$new_arr= array_merge($arr_query, $args); 

  foreach (
$new_arr as $k => $v) { 
    if (
is_array($v)){ 
      foreach (
$v as $key => $val
        if (
$need_null || $val != NULL
           
$ARR[] = $k.'['. $key.']='. urlencode($val); 
    }else if (
$need_null || $v != NULL
     
$ARR[] = "$k=". urlencode($v); 
  } 
  return
implode("&", $ARR); 

?>




<? 
include"add_args.php"

$add= array('b'=>'new`b','d'=>'new`d','f'=>''); 

$ADDR1= $PHP_SELF.'?a=a&b=b&c=c&d=d&e=&f=f&g='; # 긴 주소, 빈 인수 테스트 
$ADDR2= $PHP_SELF.'?a[]=a&b=b&c=c&d=d&e=&f=f&g='; # 배열 인수 테스트 

echo"<a href=\"$ADDR1\">$ADDR1</a> 긴 주소, 빈 인수 테스트 <br>\n"
echo
"<a href=\"$ADDR2\">$ADDR2</a> 배열 인수 테스트 <br>\n"

echo
"<hr>"

echo
"인수로써 새 변수값을 적용하고 값이 널인 것은 없애는 테스트 결과<br>\n"
test($_SERVER["REQUEST_URI"],$add); 

echo
"인수로써 새 변수값을 적용하고 값이 널인 것을 유지하는 테스트 결과<br>\n"
test($_SERVER["REQUEST_URI"],$add,1); 

print_r_pre($_GET); 

function
test($url, $add, $need_null

 
$new_url = add_args_url($url, $add, $need_null); 
  echo
"원래 주소=($url)<br>\n"
  echo
"바뀐 주소=(<a href='$new_url'>$new_url</a>) 제대로 되나 클릭해 보자<br><br>\n"

?>

반응형