public static function UriNormalizer::normalize in Lockr 7.3
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.
@link https://tools.ietf.org/html/rfc3986#section-6.2
Parameters
UriInterface $uri The URI to normalize:
int $flags A bitmask of normalizations to apply, see constants:
Return value
UriInterface The normalized URI
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 119
Class
- UriNormalizer
- Provides methods to normalize and compare URIs.
Namespace
GuzzleHttp\Psr7Code
public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS) {
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;
}