|
4 | 4 | // https://tools.ietf.org/html/rfc3986#appendix-A
|
5 | 5 | var sub_delims = '!$&\'()*+,;=';
|
6 | 6 | var alpha = 'abcdefghijklmnopqrstuvwxyz';
|
7 |
| -var digit = '0123456789' |
| 7 | +var digit = '0123456789'; |
8 | 8 | var unreserved = alpha + digit + '-._~';
|
9 |
| -var pchar = unreserved + sub_delims + ':' + '@'; //pct-encoded excluded |
10 |
| -var query = (pchar + '/' + '?').replace(/[&=]/g, ''); //&= excluded |
11 |
| -var fragment = pchar + '/' + '?'; |
| 9 | +var pchar = unreserved + sub_delims + ':@'; //pct-encoded excluded |
| 10 | +var query = (pchar + '/?').replace(/[&=]/g, ''); //&= excluded |
| 11 | +var fragment = pchar + '/?'; |
12 | 12 |
|
13 | 13 | // Map of the encoded version of all characters not requiring encoding
|
14 | 14 | var PATH_NON_ENCODED = charsToEncodedMap(pchar);
|
@@ -126,9 +126,15 @@ function urlResolve(url) {
|
126 | 126 | // No browser normalizes all of the optionally encoded characters consistently.
|
127 | 127 | // Various browsers normalize a subsets of the unreserved characters within the
|
128 | 128 | // path, search and hash portions of the URL.
|
129 |
| - urlParsingNode.pathname = normalizeUriPath(urlParsingNode.pathname); |
130 |
| - urlParsingNode.search = normalizeUriQuery(urlParsingNode.search.replace(/^\?/, '')); |
131 |
| - urlParsingNode.hash = normalizeUriFragment(urlParsingNode.hash.replace(/^\#/, '')); |
| 129 | + if (urlParsingNode.pathname) { |
| 130 | + urlParsingNode.pathname = normalizeUriPath(urlParsingNode.pathname); |
| 131 | + } |
| 132 | + if (urlParsingNode.search) { |
| 133 | + urlParsingNode.search = normalizeUriQuery(urlParsingNode.search.replace(/^\?/, '')); |
| 134 | + } |
| 135 | + if (urlParsingNode.hash) { |
| 136 | + urlParsingNode.hash = normalizeUriFragment(urlParsingNode.hash.replace(/^#/, '')); |
| 137 | + } |
132 | 138 |
|
133 | 139 | return {
|
134 | 140 | href: urlParsingNode.href,
|
|
0 commit comments