diff --git a/src/Network/Probe.php b/src/Network/Probe.php index 70ab396fed..c5ecf96ed3 100644 --- a/src/Network/Probe.php +++ b/src/Network/Probe.php @@ -65,11 +65,11 @@ class Probe */ public static function cleanURI(string $rawUri): string { - $rawUri = Network::convertToIdn($rawUri); - // At first remove leading and trailing junk $rawUri = trim($rawUri, "@#?:/ \t\n\r\0\x0B"); + $rawUri = Network::convertToIdn($rawUri); + $uri = new Uri($rawUri); if (!$uri->getScheme()) { return $uri->__toString(); diff --git a/src/Util/Network.php b/src/Util/Network.php index bc374c2bcc..af4d18b4ab 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -26,6 +26,7 @@ use Friendica\Core\Logger; use Friendica\DI; use Friendica\Model\Contact; use Friendica\Network\HTTPException\NotModifiedException; +use GuzzleHttp\Psr7\Uri; class Network { @@ -436,7 +437,7 @@ class Network * @param array $parsed URL parts * * @return string The glued URL. - * @deprecated since version 2021.12, use a UriInterface object like GuzzleHttp\Psr7\Uri instead + * @deprecated since version 2021.12, use GuzzleHttp\Psr7\Uri::fromParts($parts) instead */ public static function unparseURL(array $parsed) { @@ -473,12 +474,14 @@ class Network $parts = parse_url($uri); if (!empty($parts['scheme']) && !empty($parts['host'])) { $parts['host'] = idn_to_ascii($parts['host']); - $uri = self::unparseURL($parts); - } elseif (strstr($uri, '@')) { - $host = idn_to_ascii(substr($uri, strpos($uri, '@') + 1)); - $nick = substr($uri, 0, strpos($uri, '@')); - - $uri = $nick . '@' . $host; + $uri = Uri::fromParts($parts); + } else { + $parts = explode('@', $uri); + if (count($parts) == 2) { + $uri = $parts[0] . '@' . idn_to_ascii($parts[1]); + } else { + $uri = idn_to_ascii($uri); + } } return $uri;