WpOrg\Requests

Iri::absolutize()public staticWP 1.0

Create a new IRI object by resolving a relative IRI

Returns false if $base is not absolute, otherwise an IRI.

Method of the class: Iri{}

No Hooks.

Return

\WpOrg\Requests\Iri|false.

Usage

$result = Iri::absolutize( $base, $relative );
$base(\WpOrg\Requests\Iri|string) (required)
(Absolute) Base IRI
$relative(\WpOrg\Requests\Iri|string) (required)
Relative IRI

Iri::absolutize() code WP 6.6.2

public static function absolutize($base, $relative) {
	if (!($relative instanceof self)) {
		$relative = new self($relative);
	}
	if (!$relative->is_valid()) {
		return false;
	}
	elseif ($relative->scheme !== null) {
		return clone $relative;
	}

	if (!($base instanceof self)) {
		$base = new self($base);
	}
	if ($base->scheme === null || !$base->is_valid()) {
		return false;
	}

	if ($relative->get_iri() !== '') {
		if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null) {
			$target = clone $relative;
			$target->scheme = $base->scheme;
		}
		else {
			$target = new self;
			$target->scheme = $base->scheme;
			$target->iuserinfo = $base->iuserinfo;
			$target->ihost = $base->ihost;
			$target->port = $base->port;
			if ($relative->ipath !== '') {
				if ($relative->ipath[0] === '/') {
					$target->ipath = $relative->ipath;
				}
				elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '') {
					$target->ipath = '/' . $relative->ipath;
				}
				elseif (($last_segment = strrpos($base->ipath, '/')) !== false) {
					$target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
				}
				else {
					$target->ipath = $relative->ipath;
				}
				$target->ipath = $target->remove_dot_segments($target->ipath);
				$target->iquery = $relative->iquery;
			}
			else {
				$target->ipath = $base->ipath;
				if ($relative->iquery !== null) {
					$target->iquery = $relative->iquery;
				}
				elseif ($base->iquery !== null) {
					$target->iquery = $base->iquery;
				}
			}
			$target->ifragment = $relative->ifragment;
		}
	}
	else {
		$target = clone $base;
		$target->ifragment = null;
	}
	$target->scheme_normalization();
	return $target;
}