diff --git a/packages/router/src/url_tree.ts b/packages/router/src/url_tree.ts index 0b06fd5fc4..c9b4101793 100644 --- a/packages/router/src/url_tree.ts +++ b/packages/router/src/url_tree.ts @@ -406,7 +406,7 @@ function serializeQueryParams(params: {[key: string]: any}): string { return strParams.length ? `?${strParams.join("&")}` : ''; } -const SEGMENT_RE = /^[^\/()?;=&#]+/; +const SEGMENT_RE = /^[^\/()?;=#]+/; function matchSegments(str: string): string { const match = str.match(SEGMENT_RE); return match ? match[0] : ''; diff --git a/packages/router/test/url_serializer.spec.ts b/packages/router/test/url_serializer.spec.ts index 0b5340feee..1fe0cf3b26 100644 --- a/packages/router/test/url_serializer.spec.ts +++ b/packages/router/test/url_serializer.spec.ts @@ -359,6 +359,14 @@ describe('url serializer', () => { expect(url.serialize(parsed)).toBe(`/${notEncoded}${encoded}`); }); + + it('should correctly encode ampersand in segments', () => { + const testUrl = '/parent&child'; + + const parsed = url.parse(testUrl); + + expect(url.serialize(parsed)).toBe(testUrl); + }); }); describe('error handling', () => {