diff --git a/Tests/UriResolverTest.php b/Tests/UriResolverTest.php index e0a2a99..6328861 100644 --- a/Tests/UriResolverTest.php +++ b/Tests/UriResolverTest.php @@ -87,6 +87,8 @@ public static function provideResolverTests() ['http://', 'http://localhost', 'http://'], ['/foo:123', 'http://localhost', 'http://localhost/foo:123'], + ['foo:123', 'http://localhost/', 'foo:123'], + ['foo/bar:1/baz', 'http://localhost/', 'http://localhost/foo/bar:1/baz'], ]; } } diff --git a/UriResolver.php b/UriResolver.php index d42c2eb..398cb7b 100644 --- a/UriResolver.php +++ b/UriResolver.php @@ -32,12 +32,8 @@ public static function resolve(string $uri, ?string $baseUri): string { $uri = trim($uri); - if (false === ($scheme = parse_url($uri, \PHP_URL_SCHEME)) && '/' === ($uri[0] ?? '')) { - $scheme = parse_url($uri.'#', \PHP_URL_SCHEME); - } - // absolute URL? - if (null !== $scheme) { + if (null !== parse_url(\strlen($uri) !== strcspn($uri, '?#') ? $uri : $uri.'#', \PHP_URL_SCHEME)) { return $uri; }