Extensia URI (Uri\Rfc3986\Uri, Uri\WhatWg\Url) în PHP

Clase pentru citirea, validarea și modificarea adreselor URL după standardele RFC 3986 și WHATWG, incluse în PHP 8.5.

Sintaxă
Uri\Rfc3986\Uri::parse(string $uri, ?Uri\Rfc3986\Uri $baseUrl = null): ?static
new Uri\WhatWg\Url(string $uri, ?Uri\WhatWg\Url $baseUrl = null, &$softErrors = null)

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\Url pentru adrese venite din browser și Uri\Rfc3986\Uri pentru 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ă.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Extensia URI (Uri\Rfc3986\Uri, Uri\WhatWg\Url)

Ai o nelămurire despre utilizarea comenzii Extensia URI (Uri\Rfc3986\Uri, Uri\WhatWg\Url) sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.