diff --git a/tree.go b/tree.go index 580abbaf..f1d62f1e 100644 --- a/tree.go +++ b/tree.go @@ -511,7 +511,7 @@ walk: // Outer loop for walking the tree *value.params = (*value.params)[:i+1] val := path[:end] if unescape { - if v, err := url.QueryUnescape(val); err == nil { + if v, err := url.PathUnescape(val); err == nil { val = v } } @@ -564,7 +564,7 @@ walk: // Outer loop for walking the tree *value.params = (*value.params)[:i+1] val := path if unescape { - if v, err := url.QueryUnescape(path); err == nil { + if v, err := url.PathUnescape(val); err == nil { val = v } } diff --git a/tree_test.go b/tree_test.go index 23339af4..1647c5fb 100644 --- a/tree_test.go +++ b/tree_test.go @@ -345,10 +345,11 @@ func TestUnescapeParameters(t *testing.T) { {"/cmd/test/", false, "/cmd/:tool/", Params{Param{Key: "tool", Value: "test"}}}, {"/cmd/test", true, "", Params{Param{Key: "tool", Value: "test"}}}, {"/src/some/file.png", false, "/src/*filepath", Params{Param{Key: "filepath", Value: "/some/file.png"}}}, - {"/src/some/file+test.png", false, "/src/*filepath", Params{Param{Key: "filepath", Value: "/some/file test.png"}}}, + {"/src/some/file+test.png", false, "/src/*filepath", Params{Param{Key: "filepath", Value: "/some/file+test.png"}}}, {"/src/some/file++++%%%%test.png", false, "/src/*filepath", Params{Param{Key: "filepath", Value: "/some/file++++%%%%test.png"}}}, {"/src/some/file%2Ftest.png", false, "/src/*filepath", Params{Param{Key: "filepath", Value: "/some/file/test.png"}}}, - {"/search/someth!ng+in+ünìcodé", false, "/search/:query", Params{Param{Key: "query", Value: "someth!ng in ünìcodé"}}}, + {"/src/some/file%2Btest.png", false, "/src/*filepath", Params{Param{Key: "filepath", Value: "/some/file+test.png"}}}, + {"/search/someth!ng+in+ünìcodé", false, "/search/:query", Params{Param{Key: "query", Value: "someth!ng+in+ünìcodé"}}}, {"/info/gordon/project/go", false, "/info/:user/project/:project", Params{Param{Key: "user", Value: "gordon"}, Param{Key: "project", Value: "go"}}}, {"/info/slash%2Fgordon", false, "/info/:user", Params{Param{Key: "user", Value: "slash/gordon"}}}, {"/info/slash%2Fgordon/project/Project%20%231", false, "/info/:user/project/:project", Params{Param{Key: "user", Value: "slash/gordon"}, Param{Key: "project", Value: "Project #1"}}},