(PHP 4, PHP 5, PHP 7, PHP 8)
parse_url — Analisa uma URL e retorna seus componentes
Esta função analisa uma URL e retorna um array associativo contendo cada um dos vários componentes da URL presentes. Os valores dos elementos do array não são decodificados como URL.
Esta função não se destina a validar o URL fornecido, apenas o divide nas partes listadas abaixo. URLs parciais e inválidos também são aceitos. parse_url() faz o possível para analisá-los corretamente.
Esta função pode não fornecer resultados corretos para URLs relativos ou inválidos,
e os resultados podem nem mesmo corresponder ao comportamento comum de clientes HTTP.
Se URLs de entradas não confiáveis precisarem ser analisados, será necessária validação
extra, por exemplo, usando filter_var() com o
filtro FILTER_VALIDATE_URL.
urlA URL a ser analisada.
component
Deve ser especificada uma das constantes PHP_URL_SCHEME,
PHP_URL_HOST, PHP_URL_PORT,
PHP_URL_USER, PHP_URL_PASS,
PHP_URL_PATH, PHP_URL_QUERY
ou PHP_URL_FRAGMENT para recuperar apenas um componente
específico da URL como uma string (exceto quando
PHP_URL_PORT for informada, que no caso o valor
de retorno será um int).
Em URLs gravemente malformados, parse_url() pode retornar
false.
Se o parâmetro component for omitido, um
array associativo será retornado. Pelo menos um elemento estará
presente no array. As potenciais chaves dentro deste array são:
http
?
#
Se o parâmetro component for especificado,
parse_url() retornará uma string (ou um
int, no caso de PHP_URL_PORT)
em vez de um array. Se o componente solicitado não existir
no URL fornecido, null será retornado.
A partir do PHP 8.0.0, parse_url() diferencia consultas e fragmentos
ausentes de vazios:
http://example.com/foo → consulta = null, fragmento = null http://example.com/foo? → consulta = "", fragmento = null http://example.com/foo# → consulta = null, fragmento = "" http://example.com/foo?# → consulta = "", fragmento = ""
Anteriormente, todos os casos resultavam em consulta e fragmento null.
Observe que os caracteres de controle (compare com ctype_cntrl()) nos
componentes são substituídos por sublinhados (_).
| Versão | Descrição |
|---|---|
| 8.0.0 | parse_url() agora diferencia consultas e fragmentos vazios de ausantes. |
Exemplo #1 Um exemplo de parse_url()
<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>O exemplo acima produzirá:
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"
Exemplo #2 Um exemplo de parse_url() com esquema ausente
<?php
$url = '//www.example.com/path?googleguy=googley';
// Antes do PHP 5.4.7, o "path" seria "//www.example.com/path"
var_dump(parse_url($url));
?>O exemplo acima produzirá:
array(3) {
["host"]=>
string(15) "www.example.com"
["path"]=>
string(5) "/path"
["query"]=>
string(17) "googleguy=googley"
}
Nota:
Esta função destina-se especificamente à análise de URLs e não de URIs. No entanto, para cumprir os requisitos de compatibilidade com versões anteriores do PHP, ele abre uma exceção para o esquema
file://onde barras triplas (file:///...) são permitidas. Para qualquer outro esquema isto é inválido.