/** * Given a URL, this "normalizes" it by adding a trailing slash * and / or a leading http:// scheme where necessary. Returns * null if the original URL is malformed and cannot be normalized. * * @access private * @param string $url The URL to be normalized. * @return mixed $new_url The URL after normalization, or null if * $url was malformed. */ function normalizeUrl($url) { if ($url === null) { return null; } assert(is_string($url)); $old_url = $url; $url = trim($url); if (strpos($url, "://") === false) { $url = "http://" . $url; } $parsed = @parse_url($url); if ($parsed === false) { return null; } $defaults = array('scheme' => '', 'host' => '', 'path' => '', 'query' => '', 'fragment' => '', 'port' => ''); $parsed = array_merge($defaults, $parsed); if ($parsed['scheme'] == '' || $parsed['host'] == '') { if ($parsed['path'] == '' && $parsed['query'] == '' && $parsed['fragment'] == '') { return null; } $url = 'http://' + $url; $parsed = parse_url($url); $parsed = array_merge($defaults, $parsed); } $tail = array_map(array('Auth_OpenID', 'quoteMinimal'), array($parsed['path'], $parsed['query'], $parsed['fragment'])); if ($tail[0] == '') { $tail[0] = '/'; } $url = Auth_OpenID::urlunparse($parsed['scheme'], $parsed['host'], $parsed['port'], $tail[0], $tail[1], $tail[2]); assert(is_string($url)); return $url; }