...

View Full Version : URL Implode



gsnedders
12-21-2005, 06:32 PM
function url_implode($parsed)
{
$output = '';
if (isset($parsed['scheme']))
$output .= "$parsed[scheme]://";
if (isset($parsed['user']) && isset($parsed['pass']))
$output .= "$parsed[user]:$parsed[pass]@";
elseif (isset($parsed['user']))
$output .= "$parsed[user]@";
if (isset($parsed['host']))
$output .= rawurlencode(rawurldecode($parsed['host']));
if (isset($parsed['path']))
$output .= "$parsed[path]";
if (isset($parsed['query']))
$output .= '?' . urlencode(urldecode($parsed['query']));
if (isset($parsed['fragment']))
$output .= "#$parsed[fragment]";
return $output;
}

This function will take an parse_url array, and return a URL.

You may be wondering what the point of it is, as (normally) if you have a parse_url array, you have the URL. I was creating a PHP script to grab news from a site (using preg_match_all()) and produce an Atom feed. An Atom feed is XML, therefore must be well-formed, so all the parts of a URL must be properly escaped.

Element
12-21-2005, 09:30 PM
function url_implode($parsed)
{
$output = '';
if (isset($parsed['scheme']))
$output .= "$parsed[scheme]://";
if (isset($parsed['user']) && isset($parsed['pass']))
$output .= "$parsed[user]:$parsed[pass]@";
elseif (isset($parsed['user']))
$output .= "$parsed[user]@";
if (isset($parsed['host']))
$output .= rawurlencode(rawurldecode($parsed['host']));
if (isset($parsed['path']))
$output .= "$parsed[path]";
if (isset($parsed['query']))
$output .= '?' . urlencode(urldecode($parsed['query']));
if (isset($parsed['fragment']))
$output .= "#$parsed[fragment]";
return $output;
}

This function will take an parse_url array, and return a URL.

You may be wondering what the point of it is, as (normally) if you have a parse_url array, you have the URL. I was creating a PHP script to grab news from a site (using preg_match_all()) and produce an Atom feed. An Atom feed is XML, therefore must be well-formed, so all the parts of a URL must be properly escaped.

Indeed, this is very useful for that. Its also good for script like that one topsite (Gold something? I don't remember the name.) that stored urls all broken up by parse_url() (For some pointless reason.) And they manually put the URLs back together for redirection, but this would reduce their code alot by using a simple, useful function. Thanks for this.

gsnedders
12-26-2005, 04:10 PM
New version:

function cleanup_url($url)
{
$parsed = parse_url($url);
$output = '';
if (isset($parsed['scheme']))
$output .= "$parsed[scheme]://";
else
$output .= 'http://';
if (isset($parsed['user']) && isset($parsed['pass']))
$output .= "$parsed[user]:$parsed[pass]@";
elseif (isset($parsed['user']))
$output .= "$parsed[user]@";
if (isset($parsed['host']))
$output .= rawurlencode(rawurldecode($parsed['host']));
if (isset($parsed['path']))
$output .= "$parsed[path]";
else
$output .= '/';
if (isset($parsed['query']))
$output .= '?' . urlencode(urldecode($parsed['query']));
if (isset($parsed['fragment']))
$output .= "#$parsed[fragment]";
if (isset($parsed['scheme']))
return $output;
else
return cleanup_url($output);
}

What's new:

If no scheme is specified (eg. http, https, ftp) "http" is assumed
If no path is specified (eg. /newreply.php) "/" is assumed



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum