Exemplo n.º 1
0
 /**
  * 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;
 }