Index: branches/5.2.x/core/kernel/managers/plain_url_processor.php =================================================================== diff -u -N -r15856 -r16339 --- branches/5.2.x/core/kernel/managers/plain_url_processor.php (.../plain_url_processor.php) (revision 15856) +++ branches/5.2.x/core/kernel/managers/plain_url_processor.php (.../plain_url_processor.php) (revision 16339) @@ -1,6 +1,6 @@ $this->manager->getTemplateName()); } - $vars = Array (); - $more_vars = strpos($env_var, '&'); + parse_str(ENV_VAR_NAME . '=' . $env_var, $vars); + $env_var = $vars[ENV_VAR_NAME]; + unset($vars[ENV_VAR_NAME]); - if ( $more_vars !== false ) { - parse_str(substr($env_var, $more_vars + 1), $vars); - $env_var = substr($env_var, 0, $more_vars); - } - // replace escaped ":" symbol not to explode by it $env_var = str_replace('\:', '_&+$$+&_', $env_var); // replace escaped "=" with spec-chars :) $parts = explode(':', $env_var); @@ -160,19 +156,6 @@ $ssl = isset($params['__SSL__']) ? $params['__SSL__'] : 0; $sid = isset($params['sid']) && !$this->Application->RewriteURLs($ssl) ? $params['sid'] : ''; - $ret = ''; - if ( $env_var ) { - $ret = ENV_VAR_NAME . '='; - } - - $ret .= $sid . '-'; // SID-TEMPLATE - - $encode = false; - if ( isset($params['__URLENCODE__']) ) { - $encode = $params['__URLENCODE__']; - unset($params['__URLENCODE__']); - } - if ( isset($params['__SSL__']) ) { unset($params['__SSL__']); } @@ -214,31 +197,17 @@ } } - $ret .= $t . ':' . $this->BuildModuleEnv('m', $params, $pass_events) . $env_string; - + $env_string = $sid . '-' . $t . ':' . $this->BuildModuleEnv('m', $params, $pass_events) . $env_string; unset($params['pass'], $params['opener'], $params['m_event']); + $params = array(ENV_VAR_NAME => $env_string) + $params; - // TODO: tag, which uses resulting url should do escaping - if ( array_key_exists('escape', $params) && $params['escape'] ) { - $ret = kUtil::escape($ret, kUtil::ESCAPE_JS); - unset($params['escape']); - } + $params_str = http_build_query($params); + $ret = str_replace('%23', '#', $params_str); - if ( $params ) { - $params_str = ''; - $join_string = $encode ? '&' : '&'; - - foreach ($params as $param => $value) { - $params_str .= $join_string . $param . '=' . $value; - } - - $ret .= $params_str; + if ( !$env_var ) { + $ret = substr($ret, strlen(ENV_VAR_NAME) + 1); } - if ( $encode ) { - $ret = str_replace('\\', '%5C', $ret); - } - return $ret; }