Foros del Web » Programando para Internet » PHP »

Duda sobre textos cortos, cambiando texto a texto linkable.

Estas en el tema de Duda sobre textos cortos, cambiando texto a texto linkable. en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/10/2009, 10:42
 
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;

  #2 (permalink)  
Antiguo 06/10/2009, 10:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Duda sobre textos cortos, cambiando texto a texto linkable.

es una mala forma de hacerlo, porque imagina que yo uso solo ["+"] tu función de reemplazo me cambiaría mi "] por un "> y eso no era lo que esperaba!!

debes hacerlo igualmente con expresiones regulares...
por favor, lee el siguiente tema, ahí viene claro como puedes hacerlo:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/10/2009, 13:08
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Duda sobre textos cortos, cambiando texto a texto linkable.

Gracias por responder tan pronto pateketrueke,

Si te entiendo bien dices que es mala forma de hacerlo porque sólo captura uno de los posibles casos, es decir que el usuario ponga [url=" y que lo suyo sería probar si el usuario poner sólo [" o [ url=" o algo así, el caso es que he estado he mirando el post que me has dicho y algunos de los links que me has puesto y no acabo de pillarle el tranquillo.

Si lo entiendo bien debería poner algo así como que al principio puede ir una expresión regular html [, [url y demás y que después del =" iría la parte que quiero dejar como está. Pero no consigo aclararme, he intentado hacer algo así:

[PHP]
function makeClickableLinks($text)
{
$text = preg_replace('(\<(/?[^\>]+)\>)','<a href="http://\\2">\\2</a>', $text);
return $text;
}
[/PHP]


Y me muestra lo que quiero pero sin los hipervínculos es decir me muestra Google pero sin el hipervínculo, pero lo más raro es que por error he hecho una prueba dejando sin comentar solo el return $text; es decir así:

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

Y me muestra casi lo que quiero, es decir si en la base de datos en MySql tengo:

< a href = "http://www.google.com" >Google< / a > me muestra el texto de Google con un hipervínculo que funciona bien, ¿tal vez esto puede ser porque utilizo el comando nl2br para mostrar el campo que quiero?

Es decir hago esto:
Código PHP:
$texto $fila[links];

$texto2 makeClickableLinks($texto);
echo 
nl2br($texto2); 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.