public static function resolve($url, $base)
{
$urlParts = parse_url($url) ?: [];
$baseParts = parse_url($base) ?: [];
if (strpos($url, '//') === 0 && isset($baseParts[self::scheme])) {
return $baseParts[self::scheme] . ':' . $url;
}
// the URL is fully qualified
if (isset($urlParts[self::host])) {
return $url;
}
// the URL is absolute
$host = self::host($baseParts);
if (strpos($url, '/') === 0) {
return $host . $url;
}
// the URL is a path
$basePath = isset($baseParts[self::path]) ? $baseParts[self::path] : '';
$parts = $urlParts;
$parts[self::path] = self::resolvePath($url, $basePath);
return $host . self::path($parts);
}