/** * Create a new IRI object by resolving a relative IRI * * @static * @access public * @param SimplePie_IRI $base Base IRI * @param string $relative Relative IRI * @return SimplePie_IRI */ public static function absolutize($base, $relative) { $relative = (string) $relative; if ($relative !== '') { $relative = new SimplePie_IRI($relative); if ($relative->get_scheme() !== null) { $target = $relative; } elseif ($base->get_iri() !== null) { if ($relative->get_authority() !== null) { $target = $relative; $target->set_scheme($base->get_scheme()); } else { $target = new SimplePie_IRI(''); $target->set_scheme($base->get_scheme()); $target->set_userinfo($base->get_userinfo()); $target->set_host($base->get_host()); $target->set_port($base->get_port()); if ($relative->get_path() !== null) { if (strpos($relative->get_path(), '/') === 0) { $target->set_path($relative->get_path()); } elseif (($base->get_userinfo() !== null || $base->get_host() !== null || $base->get_port() !== null) && $base->get_path() === null) { $target->set_path('/' . $relative->get_path()); } elseif (($last_segment = strrpos($base->get_path(), '/')) !== false) { $target->set_path(substr($base->get_path(), 0, $last_segment + 1) . $relative->get_path()); } else { $target->set_path($relative->get_path()); } $target->set_query($relative->get_query()); } else { $target->set_path($base->get_path()); if ($relative->get_query() !== null) { $target->set_query($relative->get_query()); } elseif ($base->get_query() !== null) { $target->set_query($base->get_query()); } } } $target->set_fragment($relative->get_fragment()); } else { // No base URL, just return the relative URL $target = $relative; } } else { $target = $base; } return $target; }