function EasyRdf_ParsedUri::resolve
Resolves a relative URI using this URI as the base URI.
File
-
core/
modules/ rdf/ tests/ src/ Traits/ EasyRdf_ParsedUri.php, line 266
Class
- EasyRdf_ParsedUri
- A RFC3986 compliant URI parser
Namespace
Drupal\Tests\rdf\TraitsCode
public function resolve($relUri) {
// If it is a string, then convert it to a parsed object
if (is_string($relUri)) {
$relUri = new EasyRdf_ParsedUri($relUri);
}
// This code is based on the pseudocode in section 5.2.2 of RFC3986
$target = new EasyRdf_ParsedUri();
if ($relUri->scheme) {
$target->scheme = $relUri->scheme;
$target->authority = $relUri->authority;
$target->path = $relUri->path;
$target->query = $relUri->query;
}
else {
if ($relUri->authority) {
$target->authority = $relUri->authority;
$target->path = $relUri->path;
$target->query = $relUri->query;
}
else {
if (empty($relUri->path)) {
$target->path = $this->path;
if ($relUri->query) {
$target->query = $relUri->query;
}
else {
$target->query = $this->query;
}
}
else {
if (substr($relUri->path, 0, 1) == '/') {
$target->path = $relUri->path;
}
else {
$path = $this->path;
$lastSlash = strrpos($path, '/');
if ($lastSlash !== false) {
$path = substr($path, 0, $lastSlash + 1);
}
else {
$path = '/';
}
$target->path .= $path . $relUri->path;
}
$target->query = $relUri->query;
}
$target->authority = $this->authority;
}
$target->scheme = $this->scheme;
}
$target->fragment = $relUri->fragment;
$target->normalize();
return $target;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.