Hi Máté and all,

I have no issue with the usage of namespaced functions, on the contrary I
think that they do give a better understanding of the intended API usage.
It is a self contained feature which is fully decoupled from the main URI
classes with 0 side-effects.

My main goal has always been to provide a better UX over having static
methods on the main URI classes.

As you pointed out, adding percent-decoding in a later stage seems
reasonable to me, if we can find a way in the meantime to remove the
mis-usage
or mis-understanding you highlighted then at that point adding a new
function will then be a no-brainer. So there will be no pushed back from my
part around
this change.

In the meantime, I have already updated my polyfill to be inline with your
last changes. As I said earlier, the fact that the introduced Enums can not
be instantiated
from an URI makes their presence in the polyfill required but incomplete as
they can not be used before PHP8.6 since the URI classes are final and no
named
constructors can be attached to them to allow their instantiation from an
actual URI instance.

see https://github.com/thephpleague/uri-src/pull/170/changes

Looking forward to your call for voting and its outcome.

Regards,
Ignace

On Thu, Apr 30, 2026 at 9:19 PM Máté Kocsis <[email protected]> wrote:

> 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é
>
>

Reply via email to