Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leandro Ruel

Qual o algoritmo para encurtar URL?

Recommended Posts

gostaria de saber quais os algoritmos os sites estão usando para encurtar suas url's, eu tenho a leve impressão de que isso pode ser um "explode" do PHP com "str_replace" + HTML, mas como isso? :huh: sei lá alguem poderia me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar a APi do bit.ly ...

Eu já fiz encurtamento de links da seguinte maneira...

Peguei no banco de dados todas as URLs do site e gerava aleatoriamente códigos :

//Gerar códigos
$CaracteresAceitos = 'abcdxywzABCDZYWZ0123456789';  
$max = strlen($CaracteresAceitos)-1;
$password = null;
for($i=0; $i < 6; $i++) { 
	$password .= $CaracteresAceitos{mt_rand(0, $max)}; 
}
echo $password.'<br>';

 

e cadastrava em outra tabela, a url original e o código gerado...

dai quando a pessoa acessava http://site.com/index.php?c=123456 eu pegava por GET o ""c"" e fazia a busca no BD ... onde estava aquele código e retornava a URL verdadeira...

 

É basicamente isso... basta usar .htaccess para enxugar mais a URL mostrada acima...

Compartilhar este post


Link para o post
Compartilhar em outros sites

um exemplo para gerar "strings únicas" e curtas

http://forum.imasters.com.br/topic/427112-criptografar-o-get-no-php/page__p__1686364#entry1686364

 

 

a lógica:

 

1. cadastre a url no banco de dados

2. utilize id numérico auto-increment

 

utilize o alphaid (link acima) para codificar o id numérico original

 

a url ficará como as do bit.ly, youtube, etc...

 

 

 

exemplo:

 

http://foo.bar/go/Yf93gDg

 

suponha que "Yf93gDg" represente o codigo 10

 

então no banco de dados retornará a url original cujo codigo seja o 10..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um código disso ontem, não um algoritmo, mas um código.

 

<?php
if($end==null){
$con = new PDO("mysql:host=localhost;dbname=encurtador", "root", "");
echo '
<form method="post">
<input type="url" name="url" placeholder="url" required="required"/><br>
<img src="captcha.php"><br>
<input type="text" name="captcha" placeholder="Captcha" required="required"/><br>
<input type="submit" name="encurtar" value="Encurtar"/>
</form>
';

if($_POST['encurtar']){

if($_POST['captcha']!=$_SESSION['tc']){
echo "<script>window.alert('Captcha incorreto');</script>";
}else{

function fin($tamanho = 5) {
return substr(sha1(mt_rand()), 0, $tamanho);  
}

	$url=$_POST['url'];
	$fin=fin();
	$ip=$ip = $_SERVER["REMOTE_ADDR"];
	date_default_timezone_set('America/Sao_Paulo');
	$data=date("Y/m/d H:i:s");

	$query = $con->query("INSERT INTO urls (url, fin, ip, data) values ('".$url."', '".$fin."', '".$ip."', '".$data."')");
	if($query){
	$procura = $con->query("SELECT * FROM urls WHERE url='".$url."' LIMIT 01");
	$u = $procura->fetch(PDO::FETCH_OBJ);
	echo '<b>Encurtado!</b><br><input type="text" value="http://encurta.dr/'.$u->fin.'" readonly="readonly" name="fin"/><br>
		<li><a href="https://twitter.com/intent/tweet?source=webclient&text=http://encurta.dr/'.$u->fin.'" target="_blank">Publicar no twitter</a><br>';
	}

	}
	}
foreach($con->query("select count(*) from urls") as $conta){
echo $conta[0]." links foram encurtados";
}
}

?>

 

Não sei se isso te ajuda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

#2, #4..

 

o problema em ambos é que não há garantia de códigos únicos... um número randômico poderá se repetir e, a ocorrência não é baixa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

por exemplo, eu quero encurtara URL e deixa-la com o nome do meu site, barras, id ou nome aleatorio. tipo do bit.ly e outros...

 

http://meusite/454ds4

 

então eu devo guardar a url no banco de dados, atribuir um ID único, e então, renomea-lo. alguem sabe com que codigo eu faria isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Curiosidade... Existe algum site que utilize de tal técnica de encurtamento que consegue ultrapassar os 9007199254740992 registros?

 

Acho que nem o YouTube né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.