121         if ($flags & self::CAPITALIZE_PERCENT_ENCODING) {
 
  122             $uri = self::capitalizePercentEncoding($uri);
 
  125         if ($flags & self::DECODE_UNRESERVED_CHARACTERS) {
 
  126             $uri = self::decodeUnreservedCharacters($uri);
 
  129         if ($flags & self::CONVERT_EMPTY_PATH && $uri->
getPath() === 
'' &&
 
  135         if ($flags & self::REMOVE_DEFAULT_HOST && $uri->
getScheme() === 
'file' && $uri->
getHost() === 
'localhost') {
 
  147         if ($flags & self::REMOVE_DUPLICATE_SLASHES) {
 
  151         if ($flags & self::SORT_QUERY_PARAMETERS && $uri->
getQuery() !== 
'') {
 
  152             $queryKeyValues = explode(
'&', $uri->
getQuery());
 
  153             sort($queryKeyValues);
 
  154             $uri = $uri->
withQuery(implode(
'&', $queryKeyValues));
 
  177         return (
string) 
self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations);
 
  180     private static function capitalizePercentEncoding(
UriInterface $uri)
 
  182         $regex = 
'/(?:%[A-Fa-f0-9]{2})++/';
 
  184         $callback = 
function (array $match) {
 
  185             return strtoupper($match[0]);
 
  190                 preg_replace_callback($regex, $callback, $uri->
getPath())
 
  192                 preg_replace_callback($regex, $callback, $uri->
getQuery())
 
  196     private static function decodeUnreservedCharacters(UriInterface $uri)
 
  198         $regex = 
'/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i';
 
  200         $callback = 
function (array $match) {
 
  201             return rawurldecode($match[0]);
 
  206                 preg_replace_callback($regex, $callback, $uri->getPath())
 
  208                 preg_replace_callback($regex, $callback, $uri->getQuery())
 
  212     private function __construct()