Re: [RFC] [Discussion] Followup Improvements for ext/uri
| From: | Máté Kocsis | Date: | Thu, 30 Apr 2026 19:19:11 +0000 |
| Subject: | Re: [RFC] [Discussion] Followup Improvements for ext/uri | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-130722@lists.php.net to get a copy of this message | ||
Hi Ignace, Tim et al.,
I've finished updating the RFC once again, after some private discussion
with Tim:
It turned out that the percent-decoding feature as proposed would have led
to confusing behavior
in some cases. In order to avoid this, I ultimately removed the
percent-decoding support from the
proposal. In the same time, I pivoted from the "instance methods on an
enum” based approach
to a simple namespaced function based solution, because the enums would
only ever have a single
method (even if decoding support is added later, possibly not all the
(Uri|Url)PercentEncoder enum cases
would be applicable for decoding). Let me know if this doesn't work for
you, TBH adding namespaced
functions was my least favorite solution, but I didn't have any
significantly better idea which would have had
the potential to gain traction.
I have called out one example in the RFC (
https://wiki.php.net/rfc/uri_followup#percent-encoding_support)
which
would be problematic if we had a Uri\Rfc3986\uri_percent_decode() function,
so let me copy-paste it here for reference:
$uri = new Uri\Rfc3986\Uri("https://example.com/?a=b%26c"); // The query
is the percent-encoded form of "a=b&c=d"
echo Uri\Rfc3986\uri_percent_decode(
$uri->getQuery(),
Uri\Rfc3986\UriPercentEncodingMode::Query
);
// a=b&c
The result is probably not what we expected, because percent-decoding
changed the meaning of the query component:
- Originally, the query contained a parameter “a” with value “b%26c” (“b&c”)
- Now, there is a parameter “a” with value “b”, as well as a parameter “c”
without value
And I'm now attempting once again to announce my intention to start the
vote:
If no significant issue comes up this time, then I'll start the vote next
Tuesday evening (according to UTC).
Regards,
Máté