PDA

View Full Version : PHP: Turn relative links into absolute ones?


xtothez
19th April 2005, 17:59
Hi,

does anyone know of a function to turn relative links in HTML code (<a href="..."></a>, <img src="...">, ...) into absolute links?

Any help is appreciated.

X

tagammeer
19th April 2005, 18:36
Try this function:

function absolute_url($txt, $base_url){
$needles = array('href="', 'src="', 'background="');
$new_txt = '';
if(substr($base_url,-1) != '/') $base_url .= '/';
$new_base_url = $base_url;
$base_url_parts = parse_url($base_url);

foreach($needles as $needle){
while($pos = strpos($txt, $needle)){
$pos += strlen($needle);
if(substr($txt,$pos,7) != 'http://' && substr($txt,$pos,8) != 'https://' && substr($txt,$pos,6) != 'ftp://' && substr($txt,$pos,9) != 'mailto://'){
if(substr($txt,$pos,1) == '/') $new_base_url = $base_url_parts['scheme'].'://'.$base_url_parts['host'];
$new_txt .= substr($txt,0,$pos).$new_base_url;
} else {
$new_txt .= substr($txt,0,$pos);
}
$txt = substr($txt,$pos);
}
$txt = $new_txt.$txt;
$new_txt = '';
}
return $txt;
}

$txt is your HTML code where you want to convert your relative links. Works like a charm for me! :)

xtothez
20th April 2005, 19:32
Hey, that's a nice one. Does exactly what I need. :D

Thanks, tagammeer (btw, what is "tagammeer"? Is that a name, or does it mean something? Just curious... :rolleyes: )

tagammeer
20th April 2005, 20:00
btw, what is "tagammeer"? Is that a name, or does it mean something? Just curious...

No, it's not a name, "Tag am Meer" is German for "a day at the beach". I hope it gets warmer soon... :cool:

Leszek
3rd October 2008, 09:13
Like for example PHP-QT.

mmrs151
24th November 2008, 19:26
Try this function:

function absolute_url($txt, $base_url){
$needles = array('href="', 'src="', 'background="');
$new_txt = '';
if(substr($base_url,-1) != '/') $base_url .= '/';
$new_base_url = $base_url;
$base_url_parts = parse_url($base_url);

foreach($needles as $needle){
while($pos = strpos($txt, $needle)){
$pos += strlen($needle);
if(substr($txt,$pos,7) != 'http://' && substr($txt,$pos,8) != 'https://' && substr($txt,$pos,6) != 'ftp://' && substr($txt,$pos,9) != 'mailto://'){
if(substr($txt,$pos,1) == '/') $new_base_url = $base_url_parts['scheme'].'://'.$base_url_parts['host'];
$new_txt .= substr($txt,0,$pos).$new_base_url;
} else {
$new_txt .= substr($txt,0,$pos);
}
$txt = substr($txt,$pos);
}
$txt = $new_txt.$txt;
$new_txt = '';
}
return $txt;
}

$txt is your HTML code where you want to convert your relative links. Works like a charm for me! :)

Hi, if you can give me an example how to use this wonderfull piece of code...

falko
25th November 2008, 17:51
$new_txt = absolute_url($txt, $base_url);
where $txt holds the text that you want to modify and $base_url is the URL of the site.