ti-enxame.com

Verifique se uma string contém apenas um URL em PHP

Eu estou querendo saber se esta é uma maneira correta de verificar se uma string contém nada além de um URL:

if (stripos($string, 'http') == 0 && !preg_match('/\s/',$string)) {
  do_something();
}

stripos () verifica se a string começa com "http"
preg_match () checa se a string contém espaços

Se não, suponho que a string não é nada além de uma URL - mas essa suposição é válida? Existem maneiras melhores de conseguir isso?

29
yan

Use filter_var()

if (filter_var($string, FILTER_VALIDATE_URL)) { 
  // you're good
}

Os filtros podem ser ainda mais refinados. Veja o manual para saber mais sobre isso.

98
John Conde

Em PHP existe uma maneira melhor de validar o URL http://www.php.net/manual/en/function.filter-var.php

if(filter_var('http://example.com', FILTER_VALIDATE_URL)))
    echo 'this is URL';
8
Winston

Para validar com mais segurança os URLs (e os que não são "ascii"), você pode 

  1. Verifique com o filtro (não se esqueça de verificar o manual em qual filtro se adapte à sua situação) 
  2. Verifique se há registros de DNS

$string = idn_to_ascii($URL); if(filter_var($string, FILTER_VALIDATE_URL) && checkdnsrr($string, "A")){ // you have a valid URL }

0
CFP Support