diff --git a/packages/react-router/tests/router.test.tsx b/packages/react-router/tests/router.test.tsx
index 1a295a3b0b6..da88b2518f2 100644
--- a/packages/react-router/tests/router.test.tsx
+++ b/packages/react-router/tests/router.test.tsx
@@ -723,72 +723,74 @@ describe('encoding: URL path segment', () => {
it.each([
{
input: '/path-segment/%C3%A9',
- output: '/path-segment/Γ©',
+ output: '/path-segment/%25C3%25A9',
type: 'encoded',
},
{
input: '/path-segment/Γ©',
- output: '/path-segment/Γ©',
- type: 'not encoded',
+ output: '/path-segment/%C3%A9',
+ type: 'encoded',
},
{
- input: '/path-segment/100%25', // `%25` = `%`
- output: '/path-segment/100%25',
- type: 'not encoded',
+ input: '/path-segment/100%25',
+ output: '/path-segment/100%2525',
+ type: 'encoded',
},
{
input: '/path-segment/100%25%25',
- output: '/path-segment/100%25%25',
- type: 'not encoded',
+ output: '/path-segment/100%2525%2525',
+ type: 'encoded',
},
{
- input: '/path-segment/100%26', // `%26` = `&`
- output: '/path-segment/100%26',
- type: 'not encoded',
+ input: '/path-segment/100%26',
+ output: '/path-segment/100%2526',
+ type: 'encoded',
},
{
input: '/path-segment/%F0%9F%9A%80',
- output: '/path-segment/π',
+ output: '/path-segment/%25F0%259F%259A%2580',
type: 'encoded',
},
{
input: '/path-segment/%F0%9F%9A%80to%2Fthe%2Fmoon',
- output: '/path-segment/πto%2Fthe%2Fmoon',
+ output: '/path-segment/%25F0%259F%259A%2580to%252Fthe%252Fmoon',
type: 'encoded',
},
{
input: '/path-segment/%25%F0%9F%9A%80to%2Fthe%2Fmoon',
- output: '/path-segment/%25πto%2Fthe%2Fmoon',
+ output: '/path-segment/%2525%25F0%259F%259A%2580to%252Fthe%252Fmoon',
type: 'encoded',
},
{
input: '/path-segment/%F0%9F%9A%80to%2Fthe%2Fmoon%25',
- output: '/path-segment/πto%2Fthe%2Fmoon%25',
+ output: '/path-segment/%25F0%259F%259A%2580to%252Fthe%252Fmoon%2525',
type: 'encoded',
},
{
input:
'/path-segment/%F0%9F%9A%80to%2Fthe%2Fmoon%25%F0%9F%9A%80to%2Fthe%2Fmoon',
- output: '/path-segment/πto%2Fthe%2Fmoon%25πto%2Fthe%2Fmoon',
+ output:
+ '/path-segment/%25F0%259F%259A%2580to%252Fthe%252Fmoon%2525%25F0%259F%259A%2580to%252Fthe%252Fmoon',
type: 'encoded',
},
{
input: '/path-segment/π',
- output: '/path-segment/π',
- type: 'not encoded',
+ output: '/path-segment/%F0%9F%9A%80',
+ type: 'encoded',
},
{
input: '/path-segment/πto%2Fthe%2Fmoon',
- output: '/path-segment/πto%2Fthe%2Fmoon',
- type: 'not encoded',
+ output: '/path-segment/%F0%9F%9A%80to%252Fthe%252Fmoon',
+ type: 'encoded',
},
])(
'should resolve $input to $output when the path segment is $type',
async ({ input, output }) => {
const { router } = createTestRouter({
- history: createMemoryHistory({ initialEntries: [input] }),
+ history: createMemoryHistory({
+ initialEntries: [input.split('/').map(encodeURIComponent).join('/')], // In browser, the path is encoded by default
+ }),
})
-
render()
await act(() => router.load())
diff --git a/packages/router-core/src/path.ts b/packages/router-core/src/path.ts
index f2daff5104f..09a4b4a650f 100644
--- a/packages/router-core/src/path.ts
+++ b/packages/router-core/src/path.ts
@@ -183,12 +183,7 @@ export function parsePathname(pathname?: string): Array {
return {
type: 'pathname',
- value: part.includes('%25')
- ? part
- .split('%25')
- .map((segment) => decodeURI(segment))
- .join('%25')
- : decodeURI(part),
+ value: part,
}
}),
)