diff --git a/packages/react-server/examples/basic/e2e/basic.test.ts b/packages/react-server/examples/basic/e2e/basic.test.ts index f2b6afdc3..cf41a2533 100644 --- a/packages/react-server/examples/basic/e2e/basic.test.ts +++ b/packages/react-server/examples/basic/e2e/basic.test.ts @@ -727,6 +727,14 @@ test("dynamic routes", async ({ page }) => { await page.getByText("file: /test/dynamic/[id]/[nested]/page.tsx").click(); await page.getByText("pathname: /test/dynamic/abc/def").click(); await page.getByText('params: {"id":"abc","nested":"def"}').click(); + + await page.getByRole("link", { name: "/test/dynamic/🎸 + 🎷 = 🎶" }).click(); + await page.getByText('params: {"id":"🎸 + 🎷 = 🎶"}').click(); + await page.waitForURL("/test/dynamic/🎸 + 🎷 = 🎶"); + + await page.getByRole("link", { name: "/test/dynamic/%F0%9F%8E%B8%" }).click(); + await page.getByText('params: {"id":"🎸 + 🎷 = 🎶"}').click(); + await page.waitForURL("/test/dynamic/🎸 + 🎷 = 🎶"); }); test("full client route", async ({ page }) => { diff --git a/packages/react-server/examples/basic/src/routes/test/dynamic/layout.tsx b/packages/react-server/examples/basic/src/routes/test/dynamic/layout.tsx index 76b2c5fb9..2408cb37e 100644 --- a/packages/react-server/examples/basic/src/routes/test/dynamic/layout.tsx +++ b/packages/react-server/examples/basic/src/routes/test/dynamic/layout.tsx @@ -11,6 +11,8 @@ export default function Layout(props: LayoutProps) { "/test/dynamic", "/test/dynamic/static", "/test/dynamic/abc", + "/test/dynamic/🎸 + 🎷 = 🎶", + "/test/dynamic/" + encodeURI("🎸 + 🎷 = 🎶"), "/test/dynamic/abc/def", ]} /> diff --git a/packages/react-server/src/lib/router.tsx b/packages/react-server/src/lib/router.tsx index 459561385..35c520707 100644 --- a/packages/react-server/src/lib/router.tsx +++ b/packages/react-server/src/lib/router.tsx @@ -106,7 +106,7 @@ export async function renderRouteMap( if (next?.child) { node = next.child; if (next.param) { - params = { ...params, [next.param]: key }; + params = { ...params, [next.param]: decodeURI(key) }; } } else { node = initNode();