private static function normalize($uri)
    {
        $uri = self::filterUri($uri);
        $null = $uri instanceof Psr7UriInterface ? '' : null;

        $path = $uri->getPath();
        if ('/' === ($path[0] ?? '') || '' !== $uri->getScheme().$uri->getAuthority()) {
            $path = UriResolver::resolve($uri, $uri->withPath('')->withQuery($null))->getPath();
        }

        $query = $uri->getQuery();
        $fragment = $uri->getFragment();
        $fragmentOrig = $fragment;
        $pairs = null === $query ? [] : explode('&', $query);
        sort($pairs, SORT_REGULAR);

        $replace = static function (array $matches): string {
            return rawurldecode($matches[0]);
        };

        $retval = preg_replace_callback(self::REGEXP_ENCODED_CHARS, $replace, [$path, implode('&', $pairs), $fragment]);
        if (null !== $retval) {
            [$path, $query, $fragment] = $retval + ['', $null, $null];
        }

        if ($null !== $uri->getAuthority() && '' === $path) {
            $path = '/';
        }

        return $uri
            ->withHost(Uri::createFromComponents(['host' => $uri->getHost()])->getHost())
            ->withPath($path)
            ->withQuery([] === $pairs ? $null : $query)
            ->withFragment($null === $fragmentOrig ? $fragmentOrig : $fragment);
    }
private static function normalize($uri)
    {
        $uri = self::filterUri($uri);
        $null = $uri instanceof Psr7UriInterface ? '' : null;

        $path = $uri->getPath();
        if ('/' === ($path[0] ?? '') || '' !== $uri->getScheme().$uri->getAuthority()) {
            $path = UriResolver::resolve($uri, $uri->withPath('')->withQuery($null))->getPath();
        }

        $query = $uri->getQuery();
        $fragment = $uri->getFragment();
        $fragmentOrig = $fragment;
        $pairs = null === $query ? [] : explode('&', $query);
        sort($pairs, SORT_REGULAR);

        $replace = static function (array $matches): string {
            return rawurldecode($matches[0]);
        };

        $retval = preg_replace_callback(self::REGEXP_ENCODED_CHARS, $replace, [$path, implode('&', $pairs), $fragment]);
        if (null !== $retval) {
            [$path, $query, $fragment] = $retval + ['', $null, $null];
        }

        if ($null !== $uri->getAuthority() && '' === $path) {
            $path = '/';
        }

        return $uri
            ->withHost(Uri::createFromComponents(['host' => $uri->getHost()])->getHost())
            ->withPath($path)
            ->withQuery([] === $pairs ? $null : $query)
            ->withFragment($null === $fragmentOrig ? $fragmentOrig : $fragment);
    }
private static function normalize ( $ uri ) { $ uri = self :: filterUri ( $ uri ) ; $ null = $ uri instanceof Psr7UriInterface ? '' : null ; $ path = $ uri -> getPath ( ) ; if ( '/' === ( $ path [ 0 ] ?? '' ) || '' !== $ uri -> getScheme ( ) . $ uri -> getAuthority ( ) ) { $ path = UriResolver :: resolve ( $ uri , $ uri -> withPath ( '' ) -> withQuery ( $ null ) ) -> getPath ( ) ; } $ query = $ uri -> getQuery ( ) ; $ fragment = $ uri -> getFragment ( ) ; $ fragmentOrig = $ fragment ; $ pairs = null === $ query ? [ ] : explode ( '&' , $ query ) ; sort ( $ pairs , SORT_REGULAR ) ; $ replace = static function ( array $ matches ) : string { return rawurldecode ( $ matches [ 0 ] ) ; } ; $ retval = preg_replace_callback ( self :: REGEXP_ENCODED_CHARS , $ replace , [ $ path , implode ( '&' , $ pairs ) , $ fragment ] ) ; if ( null !== $ retval ) { [ $ path , $ query , $ fragment ] = $ retval + [ '' , $ null , $ null ] ; } if ( $ null !== $ uri -> getAuthority ( ) && '' === $ path ) { $ path = '/' ; } return $ uri -> withHost ( Uri :: createFromComponents ( [ 'host' => $ uri -> getHost ( ) ] ) -> getHost ( ) ) -> withPath ( $ path ) -> withQuery ( [ ] === $ pairs ? $ null : $ query ) -> withFragment ( $ null === $ fragmentOrig ? $ fragmentOrig : $ fragment ) ; }
Normalize an URI for comparison.

@param Psr7UriInterface|UriInterface $uri

@return Psr7UriInterface|UriInterface
Normalize an URI for comparison .