function absolute_url($base_url, $relative_url){ $base_url_info = parse_url($base_url); $base_url_path = explode("/", $base_url_info["path"]); $base_url_file = $base_url_path[count($base_url_path)-1]; unset($base_url_path[count($base_url_path)-1]); $relative_url_path = explode("/", $relative_url); if (parse_url($relative_url, PHP_URL_SCHEME) != ""){ return $relative_url; }else{ switch($relative_url_path[0]){ case ".": unset($relative_url_path[0]); return absolute_url ( $base_url , implode("/",$relative_url_path) ); break; case "..": unset($relative_url_path[0]); return absolute_url ( str_replace($base_url_info["path"], "", $base_url) . implode("/", $base_url_path) , implode("/", $relative_url_path) ); break; case "": return str_replace($base_url_info["path"], "", $base_url) . $relative_url ; break; default: return str_replace($base_url_info["path"], "", $base_url) . implode("/", $base_url_path) . "/" . $relative_url ; break; } } }
Sunday, April 10, 2011
Relative to absolute URL conversion / PHP
Subscribe to:
Post Comments (Atom)
Nice, but watch out for trailing slash on your base url:
ReplyDeleteabsolute_url('http://example.com/', '/blah')
causes the protocol slashes to be nuked:
http:example.com/blah
It's actually quite a bit more complicated than this. Consider:
ReplyDeleteabsolute_url('http://www.google.com/?q=foo', '?q=bar') should be: http://www.google.com/?q=bar.
Take a look at this.