Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slashes in route params are unescaped when passing uri option #1

Open
2 tasks done
weierophinney opened this issue Dec 31, 2019 · 1 comment
Open
2 tasks done

Comments

@weierophinney
Copy link
Member

I expect a parameter passed to a segment route to always be escaped. When I pass an uri option when assembling a route, for whatever reason slashes in the route parameters are unescaped. This causes the route to no longer match correctly.

$router = \Zend\Router\Http\TreeRouteStack::factory([
    'routes' => [
        'example-route' => [
            'type' => \Zend\Router\Http\Segment::class,
            'options' => [
                'route' => '/example/route/with/:token',
            ],
        ],
    ],
]);

var_dump($router->assemble([
    'token' => 'token/with/slashes',
], [
    'name' => 'example-route',
]));
// string(42) "/example/route/with/token%2Fwith%2Fslashes"

var_dump($router->assemble([
    'token' => 'token/with/slashes',
], [
    'name' => 'example-route',
    'uri' => new \Zend\Uri\Uri('/'),
]));
// string(38) "/example/route/with/token/with/slashes"

I expect the token parameter in the second case to also become encoded. For some reason passing an uri without normalize_path: false normalizes the path, unescaping the passed parameters.

Undesired normalization happens by default in these places:

https://github.com/zendframework/zend-router/blob/5ce5ff9630c4467e3eaf7cf06d78dbb2296a41b4/src/Http/TreeRouteStack.php#L420-L422

https://github.com/zendframework/zend-router/blob/5ce5ff9630c4467e3eaf7cf06d78dbb2296a41b4/src/Http/TreeRouteStack.php#L428-L430


Originally posted by @villermen at zendframework/zend-router#56

@demiankatz
Copy link

Just a quick note to say that I fell foul of the same problem, though I was able to work around it by adding the normalize_path: false option too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants