Torne o URI mais fácil de trabalhar

Percebi que às vezes pode ser difícil trabalhar com URIs em PHP. Por exemplo, digamos que você deseja adicionar uma variável de consulta a um URI adicionado pelo usuário. Idéia bem simples, certo? Bem, vamos ver o que você teria que fazer (no código) para conseguir isso:

  • Certifique-se de que a entrada do usuário seja realmente um URI válido
  • Verifique se já existe uma string de consulta (em caso afirmativo, você precisará encontrar uma maneira de preservá-la ou removê-la completamente).
  • Certifique-se de que não haja um fragmento anexado ao final da string de consulta. (talvez você precise preservar isso também)
  • Se a variável que você deseja gravar já existe, deseja substituí-la ou renomeá-la?
  • Reconstrua a string de consulta e coloque-a de volta no URI

E tudo isso é realmente bobo, considerando que usar e modificar URIs é uma coisa bastante padrão em praticamente qualquer aplicativo PHP. Quero dizer, por que não é tão simples como:

$uri = new uri($user_input);
if (empty($uri->error)) {
$uri
->query_add('myVar', 'myValue');
} else {
// invalid URI error
}

Bem, agora é 🙂

Graças à biblioteca PHP-URI , modificar e reunir informações sobre praticamente qualquer URI é realmente simples.

Alguns exemplos:

Operações de Daisy Chaining

$uri = new uri('example@gmail.com');

// Quick and easy email template URI
$uri
->chain()
->replace('SCHEME', 'mailto:')
->query_replace('subject', 'Re: [Suggestion Box]')
->query_replace('body', 'More snickers in the break room please!')
;
printf
('<a href="%1$s">%2$s</a>', $uri, $uri->authority);

resultado:

<a href="mailto:example@gmail.com?subject=Re%3A%20%5BSuggestion%20Box%5D&body=More%20snickers%20in%20the%20break%20room%20please%21">example@gmail.com</a>

Juntando informações

$uri = new uri('http://example.com/path/to/file.ext?q=1');

switch ($uri->scheme_name) {
case 'https':
case 'sftp':
case 'ssh':
echo
'Uses SSL'.PHP_EOL;
break;

default:
echo
'Does not use SSL'.PHP_EOL;
}

// Change to an absolute path
$abs_path
= $_SERVER['DOCUMENT_ROOT'].$uri->path;
echo $abs_path
.PHP_EOL;

// easier to read links
printf
('<a href="%1$s">%2$s</a>', $uri->str(), $uri->host.$uri->path);

// FTP logins
$uri
= new uri('ftp://jdoe@example.com/my/home/dir');
$login
= array(
'username' => $uri->user,
'password' => $user_input,
'domain' => $uri->host,
'path' => $uri->path
);

resultado:

Does not use SSL
/var/www/path/to/file.ext

<a href="http://example.com/path/to/file.ext?q=1">example.com/path/to/file.ext</a>

Sobre o projeto

The Github Repo

Status da versão Cobertura de código Qualidade do código do escrutinador Licença

Características

  • Analisador altamente preciso (com base no padrão URI )
  • Operações fáceis de coluna
  • Operações fáceis de consulta
  • Variáveis ​​Sincronizadas
  • Operações de Daisy Chaining
  • Aliases úteis
  • Instalação do Composer
  • 100% de cobertura de código