getUrl, getFullUrl, getSiteUrl에 대해서 getNoEncodedUrl, getNoEncodedFullUrl, getNoEncodedSiteUrl 대응 함수를 추가 (url query에 대해 htmlspecialchars를 하지 않는 함수) 하고 XE 내부적으로 redirect하는 경우 getNoEncoded*Url 함수를 이용하도록 수정

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6734 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2009-08-07 06:57:11 +00:00
parent 10c609b22c
commit 91ac64ba08
3 changed files with 44 additions and 6 deletions

View file

@ -761,7 +761,7 @@
/**
* @brief 요청받은 url에 args_list를 적용하여 return
**/
function getUrl($num_args=0, $args_list=array(), $domain = null) {
function getUrl($num_args=0, $args_list=array(), $domain = null, $encode = true) {
$oContext = &Context::getInstance();
return $oContext->_getUrl($num_args, $args_list, $domain);
}
@ -769,7 +769,7 @@
/**
* @brief 요청받은 url에 args_list를 적용하여 return
**/
function _getUrl($num_args=0, $args_list=array(), $domain = null) {
function _getUrl($num_args=0, $args_list=array(), $domain = null, $encode = true) {
static $site_module_info = null;
// 가상 사이트 정보를 구함
@ -892,7 +892,9 @@
else if($domain) $query = $this->getRequestUri(FOLLOW_REQUEST_SSL, $domain).$query;
else $query = getScriptPath().$query;
}
return htmlspecialchars($query);
if($encode) return htmlspecialchars($query);
return $query;
}
/**

View file

@ -113,7 +113,7 @@
// module_site_srl과 site_srl 값이 다르면 redirect 시도
if(!$this->module && !$module_info && $site_module_info->site_srl == 0 && $site_module_info->module_site_srl > 0) {
$site_info = $oModuleModel->getSiteInfo($site_module_info->module_site_srl);
header("location:".getSiteUrl($site_info->domain,'mid',$site_module_info->mid));
header("location:".getNoEncodedSiteUrl($site_info->domain,'mid',$site_module_info->mid));
return false;
}
@ -127,12 +127,12 @@
// 현재 요청된 모듈이 가상 사이트 모듈일 경우
if($module_info->site_srl) {
$site_info = $oModuleModel->getSiteInfo($module_info->site_srl);
$redirect_url = getSiteUrl($site_info->domain, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'),'entry',Context::get('entry'));
$redirect_url = getNoEncodedSiteUrl($site_info->domain, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'),'entry',Context::get('entry'));
// 가상 사이트 모듈이 아닌데 가상 사이트에서 호출되었을 경우
} else {
$db_info = Context::getDBInfo();
if(!$db_info->default_url) return die("기본 URL이 정해지지 않아서 동작을 중지합니다");
else $redirect_url = getSiteUrl($db_info->default_url, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'),'entry',Context::get('entry'));
else $redirect_url = getNoEncodedSiteUrl($db_info->default_url, 'mid',Context::get('mid'),'document_srl',Context::get('document_srl'),'module_srl',Context::get('module_srl'),'entry',Context::get('entry'));
}
header("location:".$redirect_url);
return false;

View file

@ -219,6 +219,15 @@
return Context::getUrl($num_args, $args_list);
}
function getNoEncodeUrl() {
$num_args = func_num_args();
$args_list = func_get_args();
if(!$num_args) return Context::getRequestUri();
return Context::getUrl($num_args, $args_list, null, false);
}
/**
* @brief getUrl() 값에 request uri를 추가하여 reutrn
* full url을 얻기 위함
@ -238,6 +247,21 @@
return $url;
}
function getNoEncodeFullUrl() {
$num_args = func_num_args();
$args_list = func_get_args();
$request_uri = Context::getRequestUri();
if(!$num_args) return $request_uri;
$url = Context::getUrl($num_args, $args_list);
if(!preg_match('/^http/i',$url)){
preg_match('/^(http|https):\/\/([^\/]+)\//',$request_uri,$match);
$url = Context::getUrl($num_args, $args_list, null, false);
return substr($match[0],0,-1).$url;
}
return $url;
}
/**
* @brief Context::getUrl() 쓰기 쉽게 함수로 선언
* @return string
@ -257,6 +281,18 @@
return Context::getUrl($num_args, $args_list, $domain);
}
function getNoEncodedSiteUrl() {
$num_args = func_num_args();
$args_list = func_get_args();
if(!$num_args) return Context::getRequestUri();
$domain = array_shift($args_list);
$num_args = count($args_list);
return Context::getUrl($num_args, $args_list, $domain, false);
}
/**
* @brief getSiteUrl() 값에 request uri를 추가하여 reutrn
* full url을 얻기 위함