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