ID:               25778
 Updated by:       [EMAIL PROTECTED]
 Reported By:      gmirchev at usa dot net
-Status:           Open
+Status:           Bogus
 Bug Type:         URL related
 Operating System: Linux
 PHP Version:      4.3.3
 New Comment:

Those are not URLS.



Previous Comments:
------------------------------------------------------------------------

[2003-10-07 10:02:09] gmirchev at usa dot net

Description:
------------
parse_url does not correctly handle these relative URLs:

a.cgi?keywords=6:54+
a.cgi?keywords=6:54

In the reproduce code is correct PHP implementation.


Reproduce code:
---------------
        function url_parse($url)
        {
                $parts = array(
                        'scheme' => '',
                        'host' => '',
                        'port' => '',
                        'user' => '',
                        'pass' => '',
                        'path' => '',
                        'query' => '',
                        'fragment' => ''
                );

                # Regular Expression from RFC 2396 (appendix B)
                
preg_match('"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"',
$url, $matches);
                
                if (array_key_exists(2, $matches)) $parts['scheme'] = $matches[2];
                if (array_key_exists(4, $matches)) $authority = $matches[4];
                if (array_key_exists(5, $matches)) $parts['path'] = $matches[5];
                if (array_key_exists(7, $matches)) $parts['query'] = $matches[7];
                if (array_key_exists(9, $matches)) $parts['fragment'] = $matches[9];
                
                # Extract username, password, host and port from authority
                preg_match('"(([^:@]*)(:([^:@]*))?@)?([^:]*)(:(.*))?"', $authority,
$matches);

                if (array_key_exists(2, $matches)) $parts['user'] = $matches[2];
                if (array_key_exists(4, $matches)) $parts['pass'] = $matches[4];
                if (array_key_exists(5, $matches)) $parts['host'] = $matches[5];
                if (array_key_exists(7, $matches)) $parts['port'] = $matches[7];
                
                return $parts;
        }




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=25778&edit=1

Reply via email to