Ir para o conteúdo principal
Github

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;