Ir para conteúdo

POWERED BY:

Arquivado

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

Rafael Fernandes_150844

Capturar links em uma string

Recommended Posts

Galera estou produzindo um sistema de newsletter e nele terá funcionalidade de capturar no corpo da mensagem todos os links e inseri-los no banco de dados e também muda-los, por ex:

 

<?
$corpo_mensagem = 'Olá Mundo! Esse é o site Google 
<a href="http://google.com">http://google.com</a> 
e este é o site do facebook <a href="http://facebook.com">http://facebook.com</a>'
?>

 

Eu quero pegar os links do google e do facebook e muda-los para

 

www.meusite.com.br/?url=http://google.com&id_subscriber=4

 

e também inserir cada link no banco de dados

 

não sei como fazer isto, alguém me dar um help?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm... olha, tive uma pequena idéia que talvez dê certo:

  • Através de regex, captar cada link (buscar por exemplo o que está dentro de cada href="")
  • Gravar o link encontrado em um índice de array
  • Faz um foreach do array, onde para cada índice, cadastre um registro no banco de dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre capturar os links, com Expressão Regular é um pouco mais simples.

$txt = <<<TXT
Olá Mundo! Esse é o site Google 
<a href="http://google.com">http://google.com</a> 
e este é o site do facebook <a href="http://facebook.com">http://facebook.com</a>
TXT;

$baseLink = 'http://www.meusite.com/?url=';
$links = array();

$txt = preg_replace_callback('@<a(.*?)href=(\'|")([^\'"]+)\2([^>]*)>@', function($matches) use ($baseLink, &$links){
	// captura o link
	$links[] = $matches[3];
	// retorna a string substituindo pelo link personalizado
	return '<a'.$matches[1] . 'href="' . $baseLink . urlencode($matches[3]) . '"' . $matches[4] . '>';
}, $txt);

echo $txt;
echo '<br><br><br><pre>';
print_r($links);

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui funcionou perfeitamente, inclusive copiando este link que você passou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

:coolio:

agora, com os links separados, você consegue gravar no banco?

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Pessoal, tentei utilizar esta função esta dando problema

Parse error: syntax error, unexpected T_FUNCTION in

simplesmente copiei o que poderia ser?

 

Obrigado

att. Brambilla

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente você está usando PHP 5.2.

Este foi desenvolvido para PHP 5.3+

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desta forma conseguir pegar os links

 

preg_match_all('@<a(.*?)href=(\'|")([^\'"]+)\2([^>]*)>@', $txt, $matches);

mais agora só falta conseguir utilizar a função para alterar os links

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolvido
Obrigado pelas dicas

abraços

preg_match_all('@<a(.*?)href=(\'|")([^\'"]+)\2([^>]*)>@', $descricao, $matches);
$get_link = '&xtra=';
foreach($matches[3] as $link)
	{
	//echo '<br>'.$link.$get_link;
	$link_novo = $link.$get_link;
	$descricao = str_replace($link, $link_novo, $descricao);
	}

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.