Utilitários de URL
Inphinit\Utility\Url é um utilitário para normalizar URLs, melhorar a legibilidade do caminho (slug) e resolver pontos e barras redundantes.
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; // http
$host = $url->host; // example.com
$path = $url->path; // /foo bar/baz.html
$query = $url->query; // Z=1&B=2&C=3&Y=4
$fragment = $url->fragment; // fragment
$port = $url->port; // NULL
$user = $url->user; // NULL
$pass = $url->pass; // NULL
$output = (string) $url; // unparse url
echo $output;
Saída:
http://example.com/foo+bar/baz.html?Z=1&B=2&C=3&Y=4#fragment
Analisando o caminho:
use Inphinit\Utility\Url;
$path = '/characters/Félix the Cat';
$url = new Url($path);
$scheme = $url->scheme; // NULL
$host = $url->host; // NULL
$path = $url->path; // /characters/Félix the Cat"
$query = $url->query; // NULL
$fragment = $url->fragment; // NULL
$port = $url->port; // NULL
$user = $url->user; // NULL
$pass = $url->pass; // NULL
$output = (string) $url; // unparse url
echo $output;
Saída:
/characters/F%C3%A9lix+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
Normalizar URLs
| Constante | Descrição |
|---|---|
Url::PATH_ASCII |
Converter o caminho para ASCII |
Url::PATH_UNICODE |
Converter o caminho para Unicode mais baixo. |
Url::PATH_SLUG |
Converter espaços e sublinhados em barras e remover caracteres não utilizados. Nota: @ é convertido para -at- |
Url::SORT_QUERY |
string de consulta de classificação |
use Inphinit\Utility\Url;
$str = "http://localhost:9000/FOO/../BAR/./ã_é_ô_ü@hello/Αλφαβητικός?Z=1&B=2&C=3&Y=4";
$url = new Url($str);
$url->normalize();
echo $url, "
\n";
echo "
\n";
$url = new Url($str);
$url->normalize(Url::PATH_ASCII);
echo $url, "
\n";
$url = new Url($str);
$url->normalize(Url::PATH_UNICODE);
echo $url, "
\n";
$url = new Url($str);
$url->normalize(Url::PATH_SLUG);
echo $url, "
\n";
$str = "http://localhost?Z=1&B=2&C=3&Y=4";
$url = new Url($str);
$url->normalize(Url::SORT_QUERY);
echo $url;
Saída:
http://localhost:9000/BAR/%C3%A3_%C3%A9_%C3%B4_%C3%BC@hello/%CE%91%CE%BB%CF%86%CE%B1%CE%B2%CE%B7%CF%84%CE%B9%CE%BA%CF%8C%CF%82?Z=1&B=2&C=3&Y=4
http://localhost:9000/bar/a_e_o_u@hello/alphabetikos?Z=1&B=2&C=3&Y=4
http://localhost:9000/bar/%C3%A3_%C3%A9_%C3%B4_%C3%BC@hello/%CE%B1%CE%BB%CF%86%CE%B1%CE%B2%CE%B7%CF%84%CE%B9%CE%BA%CF%8C%CF%82?Z=1&B=2&C=3&Y=4
http://localhost:9000/BAR/%C3%A3-%C3%A9-%C3%B4-%C3%BC-at-hello/%CE%91%CE%BB%CF%86%CE%B1%CE%B2%CE%B7%CF%84%CE%B9%CE%BA%CF%8C%CF%82?Z=1&B=2&C=3&Y=4
http://localhost?B=2&C=3&Y=4&Z=1
Utilizando múltiplas configurações
use Inphinit\Utility\Url;
$str = "http://example/foo/../--x--/--/./ã é ô ü/?B=2&C=3&Y=4&Z=1";
$url = new Url($str);
$url->normalize();
echo $url, "
\n";
$url = new Url($str);
$url->normalize(Url::PATH_UNICODE|Url::PATH_SLUG|Url::SORT_QUERY);
echo $url;
Saída:
http://example/--x--/--/%C3%A3+%C3%A9+%C3%B4+%C3%BC/?B=2&C=3&Y=4&Z=1
http://example/x/%C3%A3-%C3%A9-%C3%B4-%C3%BC/?B=2&C=3&Y=4&Z=1
Normalizando apenas o caminho
$url = new Url('/foo/../bar/./á é í/user@localhost/Αλφαβητικός/');
$url->normalize(Url::PATH_ASCII|Url::PATH_SLUG);
echo $url;
Saída:
/bar/a-e-i/user-at-localhost/alphabetikos/
Normalizando caminhos no formato usado no Windows
$url = new Url('C:\\foo\\..\bar\\.\á é í\\userlocalhost\\Αλφαβητικός\\');
$url->normalize();
echo $url;
Saída:
file:///C:%5Cbar%5C%C3%A1+%C3%A9+%C3%AD%5Cuserlocalhost%5C%CE%91%CE%BB%CF%86%CE%B1%CE%B2%CE%B7%CF%84%CE%B9%CE%BA%CF%8C%CF%82%5C
Normalizando URL mailto
$url = new Url('mailto:섭지코지@Αλφαβητικός.io?subject=This is the+subject&cc=someone_else@example.com&body=This is the+body http://example.io/2000/svg');
$url->normalize();
echo $url;
Saída:
mailto:%EC%84%AD%EC%A7%80%EC%BD%94%EC%A7%80@%CE%91%CE%BB%CF%86%CE%B1%CE%B2%CE%B7%CF%84%CE%B9%CE%BA%CF%8C%CF%82.io?subject=This+is+the%2Bsubject&cc=someone_else@example.com&body=This+is+the%2Bbody+http://example.io/2000/svg
Resolvendo caminhos
Url::canonpath() resolve /./, /../ e caracteres extras / no caminho, retornando o caminho absoluto canônico. É semelhante à função nativa realpath(), mas não exige que o arquivo exista.
Resolvendo um caminho
use Inphinit\Utility\Url;
echo Url::canonpath('/home/foo/../bar/./test.txt');
Saída:
/home/bar/test.txt
Resolvendo um caminho do Windows
use Inphinit\Utility\Url;
echo Url::canonpath('C:\\home\\foo\\..\\bar\\.\\test.txt');
Saída:
C:\home\bar\test.txt