• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

[PHP]Auto hiper-ligações

8 mensagens neste tópico

Aqui vai uma função que recebe texto e transforma todos os urls presentes em links.

function autolink($foo) {
 $foo = preg_replace('/(?<!S)([w.]+)(@)([w.]+)b/i', '<a href="mailto:$1@$3">$1@$3</a>', $foo);
 $foo = preg_replace('/(?<!S)((http(s?)://)|(www.))+([w./&=#?-~%;]+)b/i', '<a href="http$3://$4$5" target="_blank">http$3://$4$5</a>', $foo);
 $foo = preg_replace('/(?<!S)((ftp(7?)://)|(ftp.))([w./&=#?-~%;]+)b/i', '<a href="ftp$3://$4$5" target="_blank">ftp$3://$4$5</a>', $foo);
 return ($foo);
}

bem... parece que a função anterior está a causar alguns problemas... caso não funcione.. experimentem esta que o iceburn escreveu.

function apanhalinks($texto) {

 $texto = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//]+)', '<a href="\\1">\\1</a>', $texto);
 $texto = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//]+)','\\1<a href="http://\\2">\\2</a>', $texto);
 $texto = eregi_replace('([[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$)', '<a href="mailto:\\1">\\1</a>', $texto);

 return ($texto);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso dá geito para fazer aquelas cenas tipo wiki que quando a palavra existe na base de dados dá um link.

Certo??? :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso dá geito para fazer aquelas cenas tipo wiki que quando a palavra existe na base de dados dá um link.

Certo??? :)

Peço desculpa por discordar...

Isso realmente é útil, mas dessa forma o link tem de existir, para formar links a partir de palavras ter-se-ia que acrescentar mais qualquer coisa...

Há bastante tempo que utilizo não preg_match, mas sim eregi_replace com o mesmo objectivo.

De qualquer maneira a expressão utilizada dá erro.

Mas isto funcionaria:

<?php
function apanhalinks($texto) {

$texto = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '<a href="\\1">\\1</a>', $texto);
$texto = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)','\\1<a href="http://\\2">\\2</a>', $texto);
$texto = eregi_replace('([[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$)', '<a href="mailto:\\1">\\1</a>', $texto);

return ($texto);
}

$string = "Visita http://tenhamedo.net ou contacta-me em neuemail@dominio.com";

echo apanhalinks($string);
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço desculpa por discordar...

Discordas? Porquê? Se estiver na base de dados é só ir buscar, se não tiver não cria uma hiperligação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Discordas? Porquê? Se estiver na base de dados é só ir buscar, se não tiver não cria uma hiperligação.

Segundo o que me deu a entender, falavas de algo que ao encontar uma certa palavra num texto, seria automaticamente criado

um determinado link específico.

De forma que se não era de todo esse o teu ponto de vista, então fui eu que interpretei  mal a ideia, logo peço desculpa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yaps. o iceburn tem razão, li agora isto e não sei como é que respondi afirmativamente. Uma funão como a que dizes é ainda mais facil de instalar pois só temos que arranjar uma expresão regular que encontra a palavra X e vá buscar esse o link à base de dados.

A mim aquela funciona bem. Vou colocar a tua no tópico de abertura tambem,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora