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:----Z/OLjc44/K3f7w5bjJ4tx0XIbHELA1Zqy1B+zdjfjgBt+o+k39eEaelFlCs/HdEJaGhoSDnawXJkF4nPlYvx63xJMSsm7sXtC6LCFmF2sVAMtkQOs0wuDT+aTXpZ36k/kV+z3OFwmVqKfNQBBA3COInpEIwAXvIQMMj0uNAmTTfc1abziPg7xVzpZPNA/YTyvVG25y0piWTN2hPiLm71nuD69N04vu3jwcnSgeuB0KmTiqV9N71fda3E1aPqPQKLZLf1czqzecJzLMEaAmycxmn3Bo/LrNc3NqTAWuIMD91zoJ6JBXywRKkRAj3+9JSR8cj9ZEmlbOQPiC/QvZwyd75lTC1FzmFKUekRcGLOOWV0nHXCee3+cDy78oMZUO8t3hTyj/k/uY3S3d/SY034/6QyLhZLXtv4D3HuWnJBUeE4XTSMRrZi7sWZztyGfmZKBEytZa16KZIFWzL7BiCiH635xNqMa7usXzmU4tUMB/vfK5ZSglBulz05+Et+L7YWjSXnKTRY937iL3uDP6qo7nvsJxlzd1qyNHNXcfTIR2OmRjtHqxMbCSMBPlczbyZq2/kpjH860AWgdlOEFkJVeWwvy64EQkZFLdiU7TrmoOwTxxpCU7m0QH5XdukvWH7zhsGiKPoJR11yUzquV42rR2H+qrYNn/i0Bzowoljhqx0=----ATTACHMENT:----MTMzODc5NDU2MjI2NzM3MCA2MjYyMjc2OTk3NzQzNDE5IDY2NTc2NjM2OTAxNzM5MA==