From: <gem...@li...> - 2013-01-14 12:12:40
|
Revision: 1099 http://gemstracker.svn.sourceforge.net/gemstracker/?rev=1099&view=rev Author: matijsdejong Date: 2013-01-14 12:12:28 +0000 (Mon, 14 Jan 2013) Log Message: ----------- Fixed issue where only some of the url parameters where encoded Modified Paths: -------------- trunk/library/classes/MUtil/Html/UrlArrayAttribute.php Modified: trunk/library/classes/MUtil/Html/UrlArrayAttribute.php =================================================================== --- trunk/library/classes/MUtil/Html/UrlArrayAttribute.php 2013-01-13 20:03:13 UTC (rev 1098) +++ trunk/library/classes/MUtil/Html/UrlArrayAttribute.php 2013-01-14 12:12:28 UTC (rev 1099) @@ -42,7 +42,7 @@ * @subpackage Html * @copyright Copyright (c) 2011 Erasmus MC * @license New BSD License - * @since Class available since version 1.0 + * @since Class available since MUtil version 1.0 */ class MUtil_Html_UrlArrayAttribute extends MUtil_Html_ArrayAttribute { @@ -99,7 +99,7 @@ } else { // Prevent double escaping by using rawurlencode() instead // of urlencode() that is used by Zend_Controller_Router_Route - $url_parameters[$key] = rawurlencode($value); + $url_parameters[$key] = rawurlencode($value); } } @@ -117,11 +117,27 @@ // Only when no string is defined we assume this is a Zend MVC url if ($url_parameters) { + + if (! $this->getRouteReset()) { + // Add the request parameters here as otherwise $router->assemble() + // will add the existing parameters without escaping. + $request = $this->getRequest(); + + foreach ($request->getParams() as $key => $value) { + if (!array_key_exists($key, $url_parameters)) { + // E.g. Exceptions are stored as parameters :( + if (! is_object($value)) { + $url_parameters[$key] = rawurlencode($value); + } + } + } + } + // Make sure controllor, action, module are specified $url_parameters = self::rerouteUrl($this->getRequest(), $url_parameters); $router = $this->getRouter(); - return $router->assemble($url_parameters, null, $this->getRouteReset(), false); + return $router->assemble($url_parameters, null, true, false); } return null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |