Re: [RFC] [Discussion] Add WHATWG compliant URL parsing API

From: Date: Sat, 29 Jun 2024 16:19:12 +0000
Subject: Re: [RFC] [Discussion] Add WHATWG compliant URL parsing API
References: 1  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On 2024-06-28 23:06, Máté Kocsis wrote:

Hi Everyone, I've been working on a new RFC for a while now, and time has come to present it to a wider audience. Last year, I learnt that PHP doesn't have built-in support for parsing URLs according to any well established standards (RFC 1738 or the WHATWG URL living standard), since the parse_url() function is optimized for performance instead of correctness. In order to improve compatibility with external tools consuming URLs (like browsers), my new RFC would add a WHATWG compliant URL parser functionality to the standard library. The API itself is not final by any means, the RFC only represents how I imagined it first. You can find the RFC at the following link: https://wiki.php.net/rfc/url_parsing_api Regards, Máté
Hey, That's great that you've made the Url class readonly. Immutability is realiable. And I fully agree that a better parser is needed. I agree with the otters that - the enum might be fine without the backing, if it's needed at all - I'm not convinced a separate UrlParser is needed, Url::someFactory($str) should be enough - getters seem unnecessary, they should only be added if you can be sure they are going to be used for compatibility with PSR-7 - treating $query as a single string is clumsy, having some kind of bag or at least an array to represent it would be cooler and easier to build and manipulate I wanted to add that it might be more useful to make all the Url constructor arguments optional. Either nullable or with reasonable defaults. So you could `$url = new Url(path: 'robots.txt'); foreach ($domains as $d) $r[] = file_get_contents($url->withHost($d))` and stuff like that. Similar modifiers would be very useful for the query stuff, e.g. `$u = Url::current(); return $u->withQueryParam('page', $u->queryParam->page + 1);`. Sure, all of that can be done in the userland as long as you drop final :) BR, Juris

Thread (152 messages)

« previous php.internals (#124047) next »