diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index a2486ecde..a1247d33d 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -789,7 +789,7 @@ class Context { * @brief make URL with args_list upon request URL * @return result URL **/ - function getUrl($num_args=0, $args_list=array(), $domain = null, $encode = true) { + function getUrl($num_args=0, $args_list=array(), $domain = null, $encode = true, $auto = false) { static $site_module_info = null; static $current_info = null; @@ -935,7 +935,25 @@ class Context { else $query = getScriptPath().$query; } - return $encode?htmlspecialchars($query):$query; + if ($encode){ + if($auto){ + $parsedUrl = parse_url($query); + parse_str($parsedUrl['query'], $output); + $encode_queries = array(); + foreach($output as $key=>$value){ + if (!preg_match('/&[a-z]{2,};/', $value)){ + $value = htmlspecialchars($value); + } + $encode_queries[] = $key.'='.$value; + } + $encode_query = implode('&', $encode_queries); + return $parsedUrl['path'].'?'.$encode_query; + } + else + return htmlspecialchars($query); + }else{ + return $query; + } } /** diff --git a/config/func.inc.php b/config/func.inc.php index 5a887e3d2..130d7d0c4 100644 --- a/config/func.inc.php +++ b/config/func.inc.php @@ -238,6 +238,15 @@ return preg_replace('@\berror_return_url=[^&]*|\w+=(?:&|$)@', '', $url); } + function getAutoEncodedUrl() { + $num_args = func_num_args(); + $args_list = func_get_args(); + + if($num_args) $url = Context::getUrl($num_args, $args_list, null, true, true); + else $url = Context::getRequestUri(); + + return preg_replace('@\berror_return_url=[^&]*|\w+=(?:&|$)@', '', $url); + } /** * @brief return the value adding request uri to getUrl() * to get the full url