diff --git a/lib/url.js b/lib/url.js index 94fecc94270431..385061b678d89a 100644 --- a/lib/url.js +++ b/lib/url.js @@ -624,7 +624,7 @@ Url.prototype.format = function() { } } - search = search.replace('#', '%23'); + search = search.replace(/#/g, '%23'); if (hash && hash.charCodeAt(0) !== 35/*#*/) hash = '#' + hash; if (search && search.charCodeAt(0) !== 63/*?*/) search = '?' + search; diff --git a/test/parallel/test-url.js b/test/parallel/test-url.js index 046dadf1b96521..209df0df3e7829 100644 --- a/test/parallel/test-url.js +++ b/test/parallel/test-url.js @@ -1176,6 +1176,19 @@ var formatTests = { pathname: '/fooA100%mBr', }, + // multiple `#` in search + 'http://example.com/?foo=bar%231%232%233&abc=%234%23%235#frag': { + href: 'http://example.com/?foo=bar%231%232%233&abc=%234%23%235#frag', + protocol: 'http:', + slashes: true, + host: 'example.com', + hostname: 'example.com', + hash: '#frag', + search: '?foo=bar#1#2#3&abc=#4##5', + query: {}, + pathname: '/' + }, + // https://github.com/nodejs/node/issues/3361 'file:///home/user': { href: 'file:///home/user',