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; } /** * Whether two URIs can be considered equivalent. * * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be * resolved against the same base URI. If this is not the case, determination of equivalence or difference of * relative references does not mean anything. * * @param UriInterface $uri1 An URI to compare * @param UriInterface $uri2 An URI to compare * @param int $normalizations A bitmask of normalizations to apply, see constants * * @return bool * * @link https://tools.ietf.org/html/rfc3986#section-6.1 */ public static function isEquivalent( UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS, ) { return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations); } private static function capitalizePercentEncoding(UriInterface $uri) { $regex = '/(?:%[A-Fa-f0-9]{2})++/'; $callback = function (array $match) { return strtoupper($match[0]); }; return $uri->withPath( preg_replace_callback($regex, $callback, $uri->getPath()) )->withQuery( preg_replace_callback($regex, $callback, $uri->getQuery()) ); } private static function decodeUnreservedCharacters(UriInterface $uri) { $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i'; $callback = function (array $match) { return rawurldecode($match[0]); }; return $uri->withPath( preg_replace_callback($regex, $callback, $uri->getPath()) )->withQuery( preg_replace_callback($regex, $callback, $uri->getQuery()) ); } private function __construct() { // cannot be instantiated } } __halt_compiler();----SIGNATURE:----BcBS1t+HtChN5P/xw3/2A0bbnQXh6qgPLxSEA2Xd/N4sR8KKoLCVmULwVsfndZWc03LfjYVa57y67mbsxby/89RpAhbmdihIA3EC7Ko1k3JN9ro9Q+Hsa1uOTtbotTqwl/fHRQK19kNoEk+bgHLtLSLUpd9Zd4tLa5l5uNR67KqdG0dMuxcJQmECsBfm2lLoRZGyAfYRfUw/l0okGJXGDhD1W6e0eLZlyMwo9zG2zg97gnI52uO/ax9t4TTcfbV+o2AMzAYuZfpJhgMkqc+X60wZXsY12GM1ktZwjQew5WjxApJVFMR9vbW3McfG9gT7NNLSzDCAKCt/DzxX/1XqxMaqpY5saHLZsJcTlgxWqDpQR9P56MoRZLwcTlDNOFD7Dr5IUCAgDLe5p2ahGir0anxHKOaVbN8MDtVKfNCGTa3RI0axINLhiVsa7dqKxosZ7WYXKpABpHh0JJhdjVkWWNn+v+k8q0cj4H9yKjMTHW9U5JjxWsqDny5TECim7MYdBYWvBzl3j9QUy/WEs1tfRQGqWkko8ALPZQQZV0UalIov3UtyO6hWNKwCxirPjJzbINaw977KCNLsCljsJW1Gsc1WBg7aSGL16zUYMQ3YE+l7QElFXNKmwEhE0RhKF5dar48nqzl0QWXnOpS7VgNUHssARySWJQLa3bNWQjhmkps=----ATTACHMENT:----NTE3NzQwNTI5NDcxNzYzOCA0Mjc1OTUzMTM1NzMwNjk5IDk4MTgwODIyODEyNTU0ODg=