Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 3 of 3

Thread: URL Implode

  1. #1
    Senior Coder gsnedders's Avatar
    Join Date
    Jan 2004
    Posts
    2,340
    Thanks
    1
    Thanked 7 Times in 7 Posts

    URL Implode

    PHP Code:
    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.

  • #2
    Regular Coder Element's Avatar
    Join Date
    Jul 2004
    Location
    Lynnwood, Washington, US
    Posts
    855
    Thanks
    2
    Thanked 2 Times in 2 Posts
    Quote Originally Posted by Error 404
    PHP Code:
    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.

  • #3
    Senior Coder gsnedders's Avatar
    Join Date
    Jan 2004
    Posts
    2,340
    Thanks
    1
    Thanked 7 Times in 7 Posts
    New version:
    PHP Code:
    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


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •