diff --git a/lib/Cake/Routing/Route/CakeRoute.php b/lib/Cake/Routing/Route/CakeRoute.php index a81ec402d..28d3417ec 100644 --- a/lib/Cake/Routing/Route/CakeRoute.php +++ b/lib/Cake/Routing/Route/CakeRoute.php @@ -240,7 +240,7 @@ class CakeRoute { } if (isset($route['_trailing_'])) { - $route['pass'][] = $route['_trailing_']; + $route['pass'][] = rawurldecode($route['_trailing_']); unset($route['_trailing_']); } diff --git a/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php b/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php index d4bf61cf4..55f836339 100644 --- a/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php +++ b/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php @@ -857,4 +857,23 @@ class CakeRouteTest extends CakeTestCase { ); $this->assertEquals($expected, $result); } + +/** + * Test the /** special type on parsing - UTF8. + * + * @return void + */ + + public function testParseTrailingUTF8() { + $route = new CakeRoute( '/category/**', array('controller' => 'categories','action' => 'index')); + $result = $route->parse('/category/%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84'); + $expected = array( + 'controller' => 'categories', + 'action' => 'index', + 'pass' => array('موبایل'), + 'named' => array() + ); + $this->assertEquals($expected, $result); + + } }