php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #62844 parse_url() does not recognize //
Submitted: 2012-08-17 09:22 UTC Modified: 2012-08-20 05:21 UTC
From: phpqa at sebastianmendel dot de Assigned: stas (profile)
Status: Closed Package: URL related
PHP Version: 5.4.6 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: phpqa at sebastianmendel dot de
New email:
PHP Version: OS:

 

 [2012-08-17 09:22 UTC] phpqa at sebastianmendel dot de
Description:
------------
parse_url() does not recognize '//' as scheme to host separator and therefor does 
not recognize exemple.org as host in URL "//example.org"

Test script:
---------------
var_dump(parse_url('//example.org'));


Expected result:
----------------
array(1) {
  'host' =>
  string(11) "example.org"
}


Actual result:
--------------
array(1) {
  'path' =>
  string(14) "//example.org"
}



Patches

parse_url_relative_scheme2 (last revision 2012-08-19 23:31 UTC by ajf at ajf dot me)
parse_url_relative_scheme (last revision 2012-08-19 23:10 UTC by ajf at ajf dot me)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-08-17 09:59 UTC] phpqa at sebastianmendel dot de
even if doc says "This function doesn't work with relative URLs." it also says: 
"Partial URLs are also accepted, parse_url() tries its best to parse them 
correctly."

and it parses relative URLs like /path/file.html?var=1&foo=bar#123 correctly
 [2012-08-19 23:33 UTC] ajf at ajf dot me
Added patch and made pull request: https://github.com/php/php-src/pull/169
 [2012-08-20 05:21 UTC] stas@php.net
This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.

 For Windows:

http://windows.php.net/snapshots/
 
Thank you for the report, and for helping us make PHP better.


 [2012-08-20 05:21 UTC] stas@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: stas
 [2013-10-22 16:44 UTC] hanskrentel at yahoo dot de
There is a problem when having @ before the (empty) hostname, the "try best as possible" is gone then since 5.4.7 (when this 62844 fix was introduced):

echo print_r(parse_url('//site@/path/to/file.css?query'));

not parsing any path nor other parts any longer - it did before. the fix has somewhat broken this.

http://3v4l.org/mhsO7

Also why do you introduce a backwards incompatible change in a minor revision?
 [2013-10-22 18:45 UTC] ajf at ajf dot me
hanskrentel,

The change was not, so far as we knew, backwards-incompatible. It broke no existing test cases and introduced a new one.

It says "Partial URLs are also accepted, parse_url() tries its best to parse them correctly." in the documentation. This is correct, and this patch helped that, as it fixed a partial URL case which wasn't working.

It's unfortunate that the case you are showing was broken, however I do not believe that is a valid URI (please point me to the section in the RFC disagreeing if I'm wrong), and while parse_url() will "try its best" to parse partial URLs, it can't reasonably be expected to "try its best" to parse malformed URLs.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 10:01:29 2024 UTC