Ce face Extensia URI (Uri\Rfc3986\Uri, Uri\WhatWg\Url)
Extensia URI, inclusă mereu în PHP 8.5, are două clase. Uri\Rfc3986\Uri respectă standardul RFC 3986 (URI generice). Uri\WhatWg\Url respectă standardul WHATWG URL, adică interpretează adresele exact ca un browser, inclusiv normalizarea (litere mici în domeniu, rezolvarea ../).
Spre deosebire de parse_url(), clasele validează adresa și oferă metode pentru fiecare parte: getScheme(), getHost(), getPort(), getPath(), getQuery(), getFragment(). Obiectele sunt imutabile: metodele with...() (de exemplu withPath()) returnează un obiect nou.
La o adresă invalidă, Uri\Rfc3986\Uri::parse() returnează null, iar constructorii aruncă o excepție (Uri\InvalidUriException, respectiv Uri\WhatWg\InvalidUrlException).
Parametri
| Parametru | Descriere |
|---|---|
$uri |
Adresa de citit. |
$baseUrl |
Opțional. Adresa de bază, pentru a rezolva adrese relative (../poze/a.jpg). |
Ce returnează
Un obiect URI imutabil (sau null pentru Uri\Rfc3986\Uri::parse() la o adresă invalidă).
Exemple
Exemplul 1: Părțile unei adrese
<?php
$uri = Uri\Rfc3986\Uri::parse("https://www.dexblog.ro:8080/invata/php/?q=pipe#exemple");
echo $uri->getScheme() . "\n";
echo $uri->getHost() . "\n";
echo $uri->getPort() . "\n";
echo $uri->getPath() . "\n";
echo $uri->getQuery() . "\n";
echo $uri->getFragment() . "\n";
var_dump(Uri\Rfc3986\Uri::parse("adresă cu spații"));
Rezultat
https
www.dexblog.ro
8080
/invata/php/
q=pipe
exemple
NULL
Exemplul 2: Normalizare ca în browser (WHATWG)
<?php
$url = new Uri\WhatWg\Url("HTTPS://Exemplu.RO/produse/../cos?id=7");
echo $url->toAsciiString() . "\n";
$relativ = new Uri\WhatWg\Url("../poze/paine.jpg", new Uri\WhatWg\Url("https://exemplu.ro/magazin/produse/"));
echo $relativ->toAsciiString();
Rezultat
https://exemplu.ro/cos?id=7
https://exemplu.ro/magazin/poze/paine.jpg
Exemplul 3: Modificare fără a strica restul adresei
<?php
$uri = Uri\Rfc3986\Uri::parse("https://exemplu.ro/cautare?oras=Iasi");
$nou = $uri->withPath("/rezultate")->withQuery("oras=Cluj&pagina=2");
echo $uri->toString() . "\n";
echo $nou->toString();
Rezultat
https://exemplu.ro/cautare?oras=Iasi
https://exemplu.ro/rezultate?oras=Cluj&pagina=2
Greșeli frecvente
- Te bazezi pe
parse_url()pentru validare: acceptă multe adrese invalide și are reguli proprii. Pentru validare folosește noile clase. - Amesteci cele două standarde: un URL care trece de WHATWG poate fi interpretat altfel de RFC 3986. Alege
Uri\WhatWg\Urlpentru adrese venite din browser șiUri\Rfc3986\Uripentru URI generice. - Uiți că obiectele sunt imutabile:
$uri->withPath("/x");fără atribuire nu schimbă nimic.
Comenzi înrudite
parse_url: Împarte un URL în componente: protocol, domeniu, port, cale, interogare și fragment.http_build_query: Transformă un tablou în textul de interogare al unui URL (a=1&b=2), cu toate valorile codate corect.urlencode / urldecode: Codează un text ca să poată fi pus în siguranță într-un URL, ca valoare a unui parametru (după ?).filter_var: Validează sau curăță o valoare: email, număr întreg, URL, adresă IP, valoare booleană.