azjezz/psl
PSL is a modern, well-typed standard library for PHP 8.4+, inspired by HHVM’s HSL. It offers safer, predictable APIs for async, collections, networking, I/O, crypto, terminal UI, and robust data validation—replacing brittle built-ins with consistent alternatives.
The URI component provides RFC 3986 compliant parsing, normalization, reference resolution, and RFC 6570 URI Template expansion.
Parse any URI string into a structured, normalized URI object:
@example('networking/uri-parsing.php')
Normalization is applied eagerly: scheme and host are lowercased, percent-encoding is normalized (unreserved characters decoded, hex digits uppercased), and dot segments (/../, /./) are removed.
Resolve relative references against a base URI per RFC 3986 Section 5:
@example('networking/uri-resolve.php')
Parse and expand RFC 6570 URI Templates (Levels 1–4):
@example('networking/uri-template.php')
All operators are supported: simple {var}, reserved {+var}, fragment {#var}, label {.var}, path {/var}, parameter {;var}, query {?var}, and continuation {&var}. Modifiers include prefix {var:3} and explode {var*}.
The authority component is structured into user info, host, and port. Hosts are typed - either an IP address or a registered name:
@example('networking/uri-authority.php')
IPv6 addresses use RFC 5952 canonical form and support RFC 6874 zone identifiers.
| RFC | Title |
|---|---|
| RFC 3986 | Uniform Resource Identifier (URI): Generic Syntax |
| RFC 6570 | URI Template (Levels 1–4) |
| RFC 6874 | IPv6 Zone Identifiers in URIs |
| RFC 5952 | IPv6 Address Text Representation |
See src/Psl/URI/ for the full API.
How can I help you explore Laravel packages today?