diff --git a/index.js b/index.js index d45e67d..129ea26 100644 --- a/index.js +++ b/index.js @@ -455,7 +455,9 @@ exports.stringifyUrl = (object, options) => { let hash = getHash(object.url); if (object.fragmentIdentifier) { - hash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`; + const urlObjectForFragmentEncode = new URL(url); + urlObjectForFragmentEncode.hash = object.fragmentIdentifier; + hash = options[encodeFragmentIdentifier] ? urlObjectForFragmentEncode.hash : `#${object.fragmentIdentifier}`; } return `${url}${queryString}${hash}`; diff --git a/test/stringify-url.js b/test/stringify-url.js index 2b3c372..9b6ff43 100644 --- a/test/stringify-url.js +++ b/test/stringify-url.js @@ -26,6 +26,7 @@ test('stringify URL with fragment identifier', t => { t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar/#abc', query: {}, fragmentIdentifier: 'top'}), 'https://foo.bar/#top'); t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar', query: {}}), 'https://foo.bar'); t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar', query: {}, fragmentIdentifier: 'foo bar'}), 'https://foo.bar#foo%20bar'); + t.deepEqual(queryString.stringifyUrl({url: 'https://foo.bar/', query: {}, fragmentIdentifier: '/foo/bar'}), 'https://foo.bar/#/foo/bar'); }); test('skipEmptyString:: stringify URL with a query string', t => {