Como posso adicionar http://
a um URL se ele ainda não inclui um protocolo (por exemplo http://
, https://
ou ftp://
)?
Exemplo:
addhttp("google.com"); // http://google.com
addhttp("www.google.com"); // http://www.google.com
addhttp("google.com"); // http://google.com
addhttp("ftp://google.com"); // ftp://google.com
addhttp("https://google.com"); // https://google.com
addhttp("http://google.com"); // http://google.com
addhttp("rubbish"); // http://rubbish
mozilla.org
sozinho, como saberia se deveria serhttp
,https
ouftp
?Respostas:
Uma versão modificada do código @nickf:
Reconhece
ftp://
,ftps://
,http://
ehttps://
de uma forma maiúsculas e minúsculas.fonte
$url = "www.google.com"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addScheme( $url ); } echo microtime(true) - $init; echo "<BR>"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addhttp( $url ); } echo microtime(true) - $init;
No momento da escrita, nenhuma das respostas usava uma função integrada para isso:
Veja também:
parse_url()
fonte
echo addScheme('//google.com');
ltrim($url, '/')
Basta verificar se existe um protocolo (delineado por ": //") e adicionar "http: //" se não houver.
Nota : Esta pode ser uma solução simples e direta, mas a resposta de Jack usando
parse_url
é quase tão simples e muito mais robusta. Você provavelmente deve usar esse.fonte
A melhor resposta para isso seria algo assim:
fonte
Escaneie a string para
://
, se não tiver, prefixehttp://
à string .., todo o resto use a string como está.Isso funcionará a menos que você tenha uma string de entrada lixo.
fonte
solução de nickf modificada:
fonte
ftps://
também é válido.este código adicionará http: // à URL se não estiver lá.
fonte
Experimente isso. Não é estanque
*
, mas pode ser bom o suficiente:*
: isto é, prefixos como "fttps: //" são tratados como válidos.fonte