Utilitários de URL
A classe Inphinit\Utility\Url é um utilitário para processar URLs amigáveis para navegadores, oferecendo também recursos para modificar a URL e torná-la mais amigável para o usuário, como a formatação de slugs.
Analisando URLs e caminhos
Analisando URL:
use Inphinit\Utility\Url;
$path = 'http://example.com/foo bar/baz.html?Z=1&B=2&C=3&Y=4#fragment';
$url = new Url($path);
$scheme = $url->scheme; // Output: http
$host = $url->host; // Output: example.com
$path = $url->path; // Output: /foo bar/baz.html
$query = $url->query; // Output: array(Z => 1, B => 2, C => 3, Y => 4)
$fragment = $url->fragment; // Output: fragment
$port = $url->port; // Output: NULL
$user = $url->user; // Output: NULL
$pass = $url->pass; // Output: NULL
$output = (string) $url; // Output: unparse url
echo $output;
Saída:
http://example.com/foo bar/baz.html?Z=1&B=2&C=3&Y=4#fragment
Analisando apenas caminhos:
use Inphinit\Utility\Url;
$path = '/characters/Félix the Cat';
$url = new Url($path);
$scheme = $url->scheme; // Output: NULL
$host = $url->host; // Output: NULL
$path = $url->path; // Output: /characters/Félix the Cat"
$query = $url->query; // Output: array(Z => 1, B => 2, C => 3, Y => 4)
$fragment = $url->fragment; // Output: NULL
$port = $url->port; // Output: NULL
$user = $url->user; // Output: NULL
$pass = $url->pass; // Output: NULL
$output = (string) $url; // Output: unparse url
echo $output;
Saída:
/characters/Félix the Cat
Modificando os componentes de uma URL:
use Inphinit\Utility\Url;
$path = 'http://example.com/foo bar/baz.html?Z=1&B=2&C=3&Y=4#fragment';
$url = new Url($path);
$url->path = '/halloween/boo.php';
$url->host = 'localhost';
$url->scheme = 'https';
$url->port = '9090';
$url->user = 'john';
$url->pass = 'f8ySCTgD';
$url->fragment = null;
$url->query = ['a' => 'b'];
echo $url;
Saída:
https://john:f8ySCTgD@localhost:9090/halloween/boo.php?a=b
Modificando a estrutura das URLs
Ao utilizar o método Inphinit\Utility\Url::modify(), uma nova instância será criada, contendo os ajustes baseados nas flags:
| Constante | Descrição |
|---|---|
Url::HOST_IDNA_ASCII |
Modifica o host de uma URL para o formato IDNA em uma nova instância |
Url::PATH_ASCII |
Modifica o caminho de uma URL para ASCII em uma nova instância |
Url::PATH_RESOLVE |
Modifica o caminho de uma URL resolvendo .. e . em uma nova instância |
Url::PATH_SLUG |
Modifica o caminho de uma URL trocando espaços, sublinhados, barras removendo caracteres não utilizados para uma nova instância. Nota: @ é convertido para -at- |
Url::PATH_UNICODE |
Modifica o caminho de uma URL para Unicode em minusculo em uma nova instância |
Url::SORT_QUERY |
Modifica a querystring de uma URL, ordenando seus valores em uma nova instância |
Alguns exemplos de uso:
use Inphinit\Utility\Url;
$input = 'http://localhost:9000/FOO/../BAR/./ã_é_ô_ü@hello/Αλφαβητικός?Z=1&B=2&C=3&Y=4';
$url = new Url($input);
$modified = $url->modify(Url::PATH_ASCII);
// Output: http://localhost:9000/foo/../bar/./a_e_o_u@hello/alphabetikos?Z=1&B=2&C=3&Y=4
echo $modified;
$modified = $url->modify(Url::PATH_UNICODE);
// Output: http://localhost:9000/foo/../bar/./ã_é_ô_ü@hello/αλφαβητικός?Z=1&B=2&C=3&Y=4
echo $modified;
$modified = $url->modify(Url::PATH_SLUG);
// Output: http://localhost:9000/FOO/BAR/ã-é-ô-ü-at-hello/Αλφαβητικός?Z=1&B=2&C=3&Y=4
echo $modified;
$modified = $url->modify(Url::PATH_RESOLVE);
// Output: http://localhost:9000/BAR/ã_é_ô_ü@hello/Αλφαβητικός?Z=1&B=2&C=3&Y=4
echo $modified;
$modified = $url->modify(Url::SORT_QUERY);
// Output: http://localhost:9000/FOO/../BAR/./ã_é_ô_ü@hello/Αλφαβητικός?B=2&C=3&Y=4&Z=1
echo $modified;
$modified = $url->modify(Url::PATH_UNICODE|Url::PATH_RESOLVE|Url::PATH_SLUG|Url::SORT_QUERY);
// Output: http://localhost:9000/bar/ã-é-ô-ü-at-hello/αλφαβητικός?B=2&C=3&Y=4&Z=1
echo $modified;
$modified = $url->modify(Url::PATH_ASCII|Url::PATH_RESOLVE|Url::PATH_SLUG|Url::SORT_QUERY);
// Output: http://localhost:9000/bar/a-e-o-u-at-hello/alphabetikos?B=2&C=3&Y=4&Z=1
echo $modified;
Utilizando múltiplas configurações
use Inphinit\Utility\Url;
$input = 'http://localhost:9000/FOO/../BAR/./ã_é_ô_ü@hello/Αλφαβητικός?Z=1&B=2&C=3&Y=4';
$url = new Url($input);
$modified = $url->modify(Url::PATH_UNICODE|Url::PATH_RESOLVE|Url::PATH_SLUG|Url::SORT_QUERY);
// Output: http://localhost:9000/bar/ã-é-ô-ü-at-hello/αλφαβητικός?B=2&C=3&Y=4&Z=1
echo $modified;
$modified = $url->modify(Url::PATH_ASCII|Url::PATH_RESOLVE|Url::PATH_SLUG|Url::SORT_QUERY);
// Output: http://localhost:9000/bar/a-e-o-u-at-hello/alphabetikos?B=2&C=3&Y=4&Z=1
echo $modified;
Modificando apenas o caminho de uma URL
$url = new Url('/foo/../bar/./á é í/user@localhost/Αλφαβητικός/');
$modified = $url->modify(Url::PATH_ASCII|Url::PATH_SLUG);
// Output: /bar/á-é-í/userlocalhost/Αλφαβητικός/
echo $modified;
Modificando caminhos Windows
$url = new Url('C:\\foo\\..\\bar\\.\\á é í\\userlocalhost\\Αλφαβητικός\\');
$modified = $url->modify(Url::PATH_RESOLVE|Url::PATH_SLUG);
// Output: file:///C:\bar\á-é-í\userlocalhost\Αλφαβητικός\
echo $modified;
Modificando domínios para o formato IDNA ASCII (UTS #46)
$url = new Url('https://你好.com/foo/bar');
$modified = $url->modify(Url::HOST_IDNA_ASCII);
// Output: https://xn--6qq79v.com/foo/bar
echo $modified;