|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #33138 parse_url() wrongly handles relative URIs with ':'
Submitted: 2005-05-25 15:34 UTC Modified: 2005-05-27 15:28 UTC
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: Assigned:
Status: Not a bug Package: URL related
PHP Version: 4.3.11 OS: Irrelevant
Private report: No CVE-ID: None
 [2005-05-25 15:34 UTC]
parse_url() cannot handle relative URIs (ones without 
schemes) that contains ':' within the queries.

Reproduce code:

Expected result:
array(1) {
  string(6) "/a/b/c"
array(2) {
  string(6) "/a/b/c"
  string(6) "d:"
array(2) {
  string(6) "/a/b/c"
  string(6) "d:e"

Actual result:
array(1) {
  string(6) "/a/b/c"

Warning: parse_url(/a/b/c?d:): Unable to parse url in 
Command line code on line 2
array(2) {
  string(8) "/a/b/c?d"
  string(1) "e"


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2005-05-25 17:10 UTC]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at and the instructions on how to report
a bug at

A URL without a schema default to a local file, a locale file cannot have GET parameters. Hence the error, there is no bug here.
 [2005-05-25 19:03 UTC]
Is there any specification that suggests relative URI's 
point to local resources by default? Otherwise 
parse_url() is not supposed to conform to the RFC.
 [2005-05-25 20:49 UTC]
There is no requirment to support relative URL. All of the URLs with which URL RFC deals have a sheme or equivalent.
 [2005-05-25 21:02 UTC]
Wouldn't it be handy if the *URI* syntax (or RFC1808 at 
least) is supported in addition to the URL syntax?

As it can already handle relative pathes just partly at 
the moment, there shouldn't be no BC problem.
 [2005-05-25 23:38 UTC]
At the moment the code follows the RFC 1738 with some additions, which is the URL specification. As far as adding partial URL support, please consider the following; c?d:e, c?d:, etc... are all valid file names, at least on *NIX.

The only bug I see here is that we "break" the spec and allow scheme to contain non-valid chars such as / and ?. In all of the provided examples the path should contain the entire string.
 [2005-05-26 05:57 UTC]
I've added scheme validation to the code, which coincidentally made your examples work as expected :-)
 [2005-05-27 15:28 UTC]
Okay, I'm gonna check it out. Thank you for taking care 
of this.
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu May 23 06:01:35 2024 UTC