Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. UriNormalizer.php

function UriNormalizer::normalize

Returns a normalized URI.

The scheme and host component are already normalized to lowercase per PSR-7 UriInterface. This methods adds additional normalizations that can be configured with the $flags parameter.

PSR-7 UriInterface cannot distinguish between an empty component and a missing component as getQuery(), getFragment() etc. always return a string. This means the URIs "/?#" and "/" are treated equivalent which is not necessarily true according to RFC 3986. But that difference is highly uncommon in reality. So this potential normalization is implied in PSR-7 as well.

Parameters

UriInterface $uri The URI to normalize:

int $flags A bitmask of normalizations to apply, see constants:

See also

https://datatracker.ietf.org/doc/html/rfc3986#section-6.2

1 call to UriNormalizer::normalize()
UriNormalizer::isEquivalent in vendor/guzzlehttp/psr7/src/UriNormalizer.php
Whether two URIs can be considered equivalent.

File

vendor/guzzlehttp/psr7/src/UriNormalizer.php, line 124

Class

UriNormalizer
Provides methods to normalize and compare URIs.

Namespace

GuzzleHttp\Psr7

Code

public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS) : UriInterface {
    if ($flags & self::CAPITALIZE_PERCENT_ENCODING) {
        $uri = self::capitalizePercentEncoding($uri);
    }
    if ($flags & self::DECODE_UNRESERVED_CHARACTERS) {
        $uri = self::decodeUnreservedCharacters($uri);
    }
    if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')) {
        $uri = $uri->withPath('/');
    }
    if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') {
        $uri = $uri->withHost('');
    }
    if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) {
        $uri = $uri->withPort(null);
    }
    if ($flags & self::REMOVE_DOT_SEGMENTS && !Uri::isRelativePathReference($uri)) {
        $uri = $uri->withPath(UriResolver::removeDotSegments($uri->getPath()));
    }
    if ($flags & self::REMOVE_DUPLICATE_SLASHES) {
        $uri = $uri->withPath(preg_replace('#//++#', '/', $uri->getPath()));
    }
    if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') {
        $queryKeyValues = explode('&', $uri->getQuery());
        sort($queryKeyValues);
        $uri = $uri->withQuery(implode('&', $queryKeyValues));
    }
    return $uri;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal