function url_to_absolute in TMGMT Translator Smartling 8
Combine a base URL and a relative URL to produce a new absolute URL. The base URL is often the URL of a page, and the relative URL is a URL embedded on that page.
This function implements the "absolutize" algorithm from the RFC3986 specification for URLs.
This function supports multi-byte characters with the UTF-8 encoding, per the URL specification.
Parameters: baseUrl the absolute base URL.
url the relative URL to convert.
Return values: An absolute URL that combines parts of the base and relative URLs, or FALSE if the base URL is not absolute or if either URL cannot be parsed.
1 call to url_to_absolute()
- HtmlAssetInliner::getFullUrl in src/
Context/ HtmlAssetInliner.php - Converts relative URLs to absolute URLs
File
- includes/
url_to_absolute.inc, line 70 - Edited by Nitin Kr. Gupta, publicmind.in
Code
function url_to_absolute($base_url, $relative_url) {
// If relative URL has a scheme, clean path and return.
$r = split_url($relative_url);
if ($r === FALSE) {
return FALSE;
}
if (!empty($r['scheme'])) {
if (!empty($r['path']) && $r['path'][0] == '/') {
$r['path'] = url_remove_dot_segments($r['path']);
}
return join_url($r);
}
// Make sure the base URL is absolute.
$b = split_url($base_url);
if ($b === FALSE || empty($b['scheme']) || empty($b['host'])) {
return FALSE;
}
$r['scheme'] = $b['scheme'];
// If relative URL has an authority, clean path and return.
if (isset($r['host'])) {
if (!empty($r['path'])) {
$r['path'] = url_remove_dot_segments($r['path']);
}
return join_url($r);
}
unset($r['port']);
unset($r['user']);
unset($r['pass']);
// Copy base authority.
$r['host'] = $b['host'];
if (isset($b['port'])) {
$r['port'] = $b['port'];
}
if (isset($b['user'])) {
$r['user'] = $b['user'];
}
if (isset($b['pass'])) {
$r['pass'] = $b['pass'];
}
// If relative URL has no path, use base path
if (empty($r['path'])) {
if (!empty($b['path'])) {
$r['path'] = $b['path'];
}
if (!isset($r['query']) && isset($b['query'])) {
$r['query'] = $b['query'];
}
return join_url($r);
}
// If relative URL path doesn't start with /, merge with base path
if (isset($b['path']) && $r['path'][0] != '/') {
$base = mb_strrchr($b['path'], '/', TRUE, 'UTF-8');
if ($base === FALSE) {
$base = '';
}
$r['path'] = $base . '/' . $r['path'];
}
$r['path'] = url_remove_dot_segments($r['path']);
return join_url($r);
}