parse_url în PHP

URL și HTTP PHP 4+

Împarte un URL în componente: protocol, domeniu, port, cale, interogare și fragment.

Sintaxă
parse_url(string $url, int $component = -1): array|string|int|false|null

Ce face parse_url

parse_url desface o adresă web și returnează un tablou cu cheile scheme, host, port, user, pass, path, query și fragment. Apar doar componentele prezente în URL.

Cu al doilea parametru ceri o singură componentă, de exemplu PHP_URL_HOST sau PHP_URL_QUERY. Atunci rezultatul este direct textul (sau null dacă acea parte lipsește).

parse_url nu verifică dacă URL-ul este valid. Returnează false doar pentru adrese foarte stricate. Pentru validare folosește filter_var cu FILTER_VALIDATE_URL.

Parametri

Parametru Descriere
$url Adresa de analizat.
$component Opțional. Una dintre constantele PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY, PHP_URL_FRAGMENT.

Ce returnează

Un tablou cu componentele, textul (sau numărul portului) când ceri o singură componentă, null dacă acea componentă lipsește, sau false pentru un URL grav stricat.

Exemple

Exemplul 1: Toate componentele

<?php
$url = "https://ana:secret@www.dexblog.ro:8080/invata/php/?q=date&p=2#exemple";

print_r(parse_url($url));

Rezultat

Array
(
    [scheme] => https
    [host] => www.dexblog.ro
    [port] => 8080
    [user] => ana
    [pass] => secret
    [path] => /invata/php/
    [query] => q=date&p=2
    [fragment] => exemple
)

Exemplul 2: O singură componentă

<?php
$url = "https://www.dexblog.ro/invata/php/?q=date";

echo parse_url($url, PHP_URL_HOST) . "\n";
echo parse_url($url, PHP_URL_PATH) . "\n";
var_dump(parse_url($url, PHP_URL_FRAGMENT));

Rezultat

www.dexblog.ro
/invata/php/
NULL

Exemplul 3: Este un link extern?

<?php
$linkuri = ["https://www.dexblog.ro/contact/", "https://exemplu.com/pagina", "/despre/"];

foreach ($linkuri as $link) {
    $domeniu = parse_url($link, PHP_URL_HOST);
    $extern = $domeniu !== null && $domeniu !== "www.dexblog.ro";
    echo $link . " => " . ($extern ? "extern" : "intern") . "\n";
}

Rezultat

https://www.dexblog.ro/contact/ => intern
https://exemplu.com/pagina => extern
/despre/ => intern

Greșeli frecvente

  • Folosești parse_url ca să validezi un URL introdus de utilizator. Funcția acceptă și texte care nu sunt adrese reale. Validează cu filter_var($url, FILTER_VALIDATE_URL).
  • Accesezi $parti["port"] sau $parti["query"] fără să verifici. Cheile lipsesc când URL-ul nu are acele părți și primești un Warning. Folosește $parti["query"] ?? "".

Comenzi înrudite

  • parse_str: Transformă textul de interogare al unui URL (a=1&b=2) într-un tablou, cu valorile decodate.
  • http_build_query: Transformă un tablou în textul de interogare al unui URL (a=1&b=2), cu toate valorile codate corect.
  • filter_var: Validează sau curăță o valoare: email, număr întreg, URL, adresă IP, valoare booleană.
  • urlencode / urldecode: Codează un text ca să poată fi pus în siguranță într-un URL, ca valoare a unui parametru (după ?).