parse_url

(PHP 4, PHP 5, PHP 7)

parse_urlAnaliza un URL y devuelve sus componentes

Descripción

parse_url ( string $url [, int $component = -1 ] ) : mixed

Esta función analiza una URL y devuelve un array asociativo que contiene aquellos componentes presentes en la URL.

El propósito de esta función no es validar la URL dada, tan solo la separa en las partes listadas anteriormente. Las URLs parciales son aceptadas también, parse_url() hace lo mejor que puede para procesarlas correctamente.

Parámetros

url

La URL a analizar. Caracteres inválidos son reemplazados por _.

component

Especifique uno de PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY o PHP_URL_FRAGMENT para recibir solo un componente URL específico como un valor tipo string (excepto cuando se da PHP_URL_PORT, en cuyo caso el valor de retorno será un integer).

Valores devueltos

Sobre URLs seriamente malformadas, parse_url() puede devolver FALSE.

Si se omite el parámetro component, un array asociativo es devuelto. Al menos un elemento estará presente en el array. Claves potenciales en este array son:

  • scheme - p.ej. http
  • host
  • port
  • user
  • pass
  • path
  • query - después del signo ?
  • fragment - después del signo #

Si se especifica el parámetro componente, parse_url() devolverá un string (o un integer, para el caso de PHP_URL_PORT) en lugar de un array. Si el componente solicitado no existe en la URL dada, será devuelto NULL.

Historial de cambios

Versión Descripción
5.4.7 Arreglado el reconocimiento de host cuando scheme es omitido y está presente un separador de componentes que lo encabeza.
5.3.3 Eliminado el E_WARNING que era producido cuando fallaba el análisis de la URL.
5.1.2 Se agregó el parámetro component.

Ejemplos

Ejemplo #1 Un ejemplo de parse_url()

<?php
$url 
'http://username:password@hostname:9090/path?arg=value#anchor';

var_dump(parse_url($url));
var_dump(parse_url($urlPHP_URL_SCHEME));
var_dump(parse_url($urlPHP_URL_USER));
var_dump(parse_url($urlPHP_URL_PASS));
var_dump(parse_url($urlPHP_URL_HOST));
var_dump(parse_url($urlPHP_URL_PORT));
var_dump(parse_url($urlPHP_URL_PATH));
var_dump(parse_url($urlPHP_URL_QUERY));
var_dump(parse_url($urlPHP_URL_FRAGMENT));
?>

El resultado del ejemplo sería:

array(8) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(8) "hostname"
  ["port"]=>
  int(9090)
  ["user"]=>
  string(8) "username"
  ["pass"]=>
  string(8) "password"
  ["path"]=>
  string(5) "/path"
  ["query"]=>
  string(9) "arg=value"
  ["fragment"]=>
  string(6) "anchor"
}
string(4) "http"
string(8) "username"
string(8) "password"
string(8) "hostname"
int(9090)
string(5) "/path"
string(9) "arg=value"
string(6) "anchor"

Ejemplo #2 Un ejemplo de parse_url() con el esquema ausente

<?php
$url 
'//www.example.com/path?googleguy=googley';

// Antes de 5.4.7, esto mostraría la ruta como "//www.example.com/path"
var_dump(parse_url($url));
?>

El resultado del ejemplo sería:

array(3) {
  ["host"]=>
  string(15) "www.example.com"
  ["path"]=>
  string(5) "/path"
  ["query"]=>
  string(17) "googleguy=googley"
}

Notas

Nota:

Esta función no funciona con URLs relativas.

Nota:

Esta función tiene el propósito específico de procesar URLs, y no URIs. Sin embargo, para cumplir con los requerimientos de retrocompatibilidad de PHP, hace una excepción para el esquema file:// en donde se permiten tres barras (file:///...). Para cualquier otro esquema, lo anterior es inválido.

Ver también