Ir para conteúdo
Fórum Script Brasil
  • 0

Transformar Urls De Um Texto Em Links


Beraldo

Pergunta

Saudações, pessoal! :)

Resolvi criar uma função que transformasse em links URLs de um texto.

Se a URL for muito grande, a função também a reduz.

código da função

<?php

#############################################
#                                           #
#  Autor: Roberto Beraldo Chaiben (Beraldo) #
#   E-Mail: rbchaiben[arroba]gmail.com      #
#                                           #
#############################################

/*
   string MontarLink (string texto)
   
   A função MontarLink() transforma em links as URLs iniciadas por 'http://' contidas no argumento 'texto'.
   Se a URL tiver mais que 60 caracteres, serão exibidos os 25 primeiros, seguidos de reticências (...) e os últimos 15.
   Se 'texto' não for uma string, a função retorna FALSE.
   
   IMPORTANTE: Se o link se iniciar por 'www' e não tiver 'http://', a função nào surtirá efeito.
*/


function MontarLink ($texto)
{
       if (!is_string ($texto))
           return false;
       
    $er = "/http:\/\/(www\.|.*?\/)?([a-zA-Z0-9]+|_|-)+(\.(([0-9a-zA-Z]|-|_|\/|\?|=|&)+))+/i";
    preg_match_all ($er, $texto, $match);
    
    foreach ($match[0] as $link)
    {
        
        $link = strtolower ($link);
        if (strstr ($link, "http://") === false)
            $link = "http://" . $link;
           $link_len = strlen ($link);
        
        //troca "&" por "&", tornando o link válido pela W3C
        $web_link = str_replace ("&", "&", $link);
       $texto = str_ireplace ($link, "<a href=\"" . $web_link . "\" target=\"_blank\">". (($link_len > 60) ? substr ($web_link, 0, 25). "...". substr ($web_link, -15) : $link) ."</a>", $texto);
        
    }
    
    return $texto;
}
Um exemplo de como funciona:
$a = "O link http://www.Trova.Di.danu é Metal! http://www.Tuatha.de.danann também é metal!";
echo "<p>" . MontarLink ($a) . "</p>\r\n";
$b = "O link http://www.master.of.puppets.that.should.not.be/index.php?id=7&x=y parece interessante.";
echo "<p>" . MontarLink ($b) . "</p>\r\n";
$c = "O link http://www.MetropolisPt2.Scenes.from.a.memory/regression/Overture1928 também parece ótimo";
echo "<p>" . MontarLink ($c) . "</p>\r\n";

Abraços

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Versão 2 hehe :D

Agora a função converte URL's iniciadas por www, mesmo que não possua http://. :D

E corrigi a "falha" que fazia com que, se o parâmetro texto não fosse string, a função retornsse FALSE. Agora, se texto não for string, o próprio parâmetro é retornado sem quaisquer alterações.

<?php

#############################################
#                                           #
#  Autor: Roberto Beraldo Chaiben (Beraldo) #
#   E-Mail: rbchaiben[arroba]gmail.com      #
#                                           #
#############################################

/*
   string MontarLink (string texto)
  
   A função MontarLink() transforma em links as URLs iniciadas por 'http://' ou 'www' contidas no argumento 'texto'.
   Se a URL tiver mais que 60 caracteres, serão exibidos os 25 primeiros, seguidos de reticências (...) e os últimos 15.
   Se 'texto' não for uma string, a função retorna 'texto' sem quaisquer alterações.
  
*/


function MontarLink ($texto)
{
       if (!is_string ($texto))
           return $texto;
      
    $er = "/(http:\/\/(www\.|.*?\/)?|www\.)([a-zA-Z0-9]+|_|-)+(\.(([0-9a-zA-Z]|-|_|\/|\?|=|&)+))+/i";
    preg_match_all ($er, $texto, $match);
    
    foreach ($match[0] as $link)
    {
        //coloca o 'http://' caso o link não o possua
        $link_completo = (stristr($link, "http://") === false) ? "http://" . $link : $link;
        
        $link_len = strlen ($link);
        
        
        //troca "&" por "&", tornando o link válido pela W3C
       $web_link = str_replace ("&", "&amp;", $link_completo);
       $texto = str_ireplace ($link, "<a href=\"" . strtolower($web_link) . "\" target=\"_blank\">". (($link_len > 60) ? substr ($web_link, 0, 25). "...". substr ($web_link, -15) : $web_link) ."</a>", $texto);
     
    }
    
    return $texto;
    
}

?>

A forma de usar continua sendo a mesma. ;)

[]'s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...