Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/10/2009, 10:42
haga41
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Duda sobre textos cortos, cambiando texto a texto linkable.

Hola a todos,

He encontrado por ahí una función que sirve para convertir texto plano en hípervinculos, en este caso sería texto que viene de una base de datos en MySql. El caso es que querría retocar eso para que en el caso de los links largos aparezca sólo un texto como hípervinculo en vez del típico: http:// la función que estoy usando la saque de esta web: http://techjunk.websewak.com/convert...ext-using-php/ y luego le he intentado añadir un str_replace para que haga lo que yo quiero pero no termina de funcionar.

La idea es que el usuario escriba en el campo de links los enlaces así: Google y esta función mediante el str_replace y el resto de cosas que tiene muestre esto <a href="http://www.google.com"]Google</a> y el texto de Google sea un hipervínculo a "http://www.google.com".

En uno de los casos he conseguido que poniendo Google me cree un texto Google que es un hipervínculo pero en vez ser un hipervínuclo a "http://www.google.com" es un hipervínculo a "http://localhost/sitio/ww.google.com". Si en vez de ponerlo http lo pongo sólo con www simplemente no funciona.


Si podéis echarme un cable o darme un consejo sobre que es lo que falla, os lo agradecería mucho.

Saludos

Código PHP:
function makeClickableLinks($text)
{

        
$text html_entity_decode($text);
        
$text " ".$text;
        
$text eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                
'<a href="\\1" target=_blank>\\1</a>'$text);
        
$text eregi_replace('(((f|ht){1}tps://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                
'<a href="\\1" target=_blank>\\1</a>'$text);
        
$text eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
        
'\\1<a href="http://\\2" target=_blank>\\2</a>'$text);
        
$text eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})',
        
'<a href="mailto:\\1" target=_blank>\\1</a>'$text);

/* Esta parte la ha añadido yo */
    
$enlaces1 = array('[url="','"]','[/url]');
        
$enlaces2 = array('<a href="','">','</a>');

        
$text str_replace($enlaces1$enlaces2$text);

/* Esta parte la ha añadido yo */

        
return $text;