Let's say I have a URL of the document linking to another document (which can be both absolute or relative) and I need to have this link in absolute.
I made the simple function providing this functionality for several common cases:
function absolute_url($url,$parent_url){
$parent_url=parse_url($parent_url);
if(strcmp(substr($url,0,7),'http://')==0){
return $url;
}
elseif(strcmp(substr($url,0,1),'/')==0){
return $parent_url['scheme']."://".$parent_url['host'].$url;
}
else{
$path=$parent_url['path'];
$path=substr($path,0,strrpos($path,'/'));
return $parent_url['scheme']."://".$parent_url['host']."$path/".$url;
}
}
$parent_url='http://example.com/path/to/file/name.php?abc=abc';
echo absolute_url('name2.php',$parent_url)."\n";
// output http://example.com/path/to/file/name2.php
echo absolute_url('/name2.php',$parent_url)."\n";
// output http://example.com/name2.php
echo absolute_url('http://name2.php',$parent_url)."\n";
// output http://name2.php
The code works fine, but there could be more cases such as ../../path/to/file.php
which will not work.
So is there any standard classes or function doing this thing better (more universal) that my function?
I tried to Google it and check the similar questions (one and two) but it looks like server-path related solution which is not the thing I'm looking for.