Index: tests/Zend/Controller/Request/HttpTest.php =================================================================== --- tests/Zend/Controller/Request/HttpTest.php (revision 21858) +++ tests/Zend/Controller/Request/HttpTest.php (working copy) @@ -839,6 +839,70 @@ $pathInfo = $request->getPathInfo(); $this->assertEquals('/index/index', $pathInfo); } + + + /** + * @group ZF-3527 + */ + public function testGetRequestUriShouldReturnDecodedUri() + { + $request = new Zend_Controller_Request_Http(); + $request->setBaseUrl( '%7Euser' ); + $this->assertEquals( '~user', $request->getBaseUrl() ); + } + + /** + * @group ZF-3527 + */ + public function testPathInfoShouldRespectEncodedBaseUrl() + { + $request = new Zend_Controller_Request_Http(); + $request->setBaseUrl( '%7Euser' ); + $_SERVER['REQUEST_URI'] = '~user/module/controller/action'; + $pathInfo = $request->getPathInfo(); + + $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo); + } + + /** + * @group ZF-3527 + */ + public function testPathInfoShouldRespectNonEncodedBaseUrl() + { + $request = new Zend_Controller_Request_Http(); + $request->setBaseUrl( '~user' ); + $_SERVER['REQUEST_URI'] = '~user/module/controller/action'; + $pathInfo = $request->getPathInfo(); + + $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo); + } + + /** + * @group ZF-3527 + */ + public function testPathInfoShouldRespectEncodedRequestUri() + { + $request = new Zend_Controller_Request_Http(); + $request->setBaseUrl( '~user' ); + $_SERVER['REQUEST_URI'] = '%7Euser/module/controller/action'; + $pathInfo = $request->getPathInfo(); + + $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo); + } + + /** + * @group ZF-3527 + */ + public function testPathInfoShouldRespectNonEncodedRequestUri() + { + $request = new Zend_Controller_Request_Http(); + $request->setBaseUrl( '~user' ); + $_SERVER['REQUEST_URI'] = '~user/module/controller/action'; + $pathInfo = $request->getPathInfo(); + + $this->assertEquals( '/module/controller/action', $pathInfo, $pathInfo); + } + } // Call Zend_Controller_Request_HttpTest::main() if this source file is executed directly. Index: library/Zend/Controller/Request/Http.php =================================================================== --- library/Zend/Controller/Request/Http.php (revision 21858) +++ library/Zend/Controller/Request/Http.php (working copy) @@ -551,7 +551,7 @@ $this->setBaseUrl(); } - return $this->_baseUrl; + return urldecode( $this->_baseUrl ); } /** @@ -623,6 +623,8 @@ $requestUri = substr($requestUri, 0, $pos); } + $requestUri = urldecode( $requestUri ); + if (null !== $baseUrl && ((!empty($baseUrl) && 0 === strpos($requestUri, $baseUrl)) || empty($baseUrl))