Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Links automáticos

Estas en el tema de Links automáticos en el foro de PHP en Foros del Web. Buenos días a todos. Les cuento que tengo un foro y me gustaría que los links que la gente pone en las publicaciones se generen ...
  #1 (permalink)  
Antiguo 23/10/2013, 08:32
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Links automáticos

Buenos días a todos. Les cuento que tengo un foro y me gustaría que los links que la gente pone en las publicaciones se generen automáticamente.

Estuve revisando los foros y encontré varias publicaciones al respecto que me ayudaron mucho.

Por el momento tengo este código que está funcionando casi sin problemas

Código PHP:
<?php
    $listadoPalabras 
explode' '$texto );
    
$contenido '';
    foreach( 
$listadoPalabras as $indice => $palabra) {
        if( 
strstr($palabra'www') ){
            
$listadoPalabras[$indice] = "<a href='http://$palabra' target='_blank'>$palabra</a>";
        } else if( 
strstr($palabra'http://') ){
            
$listadoPalabras[$indice] = "<a href='$palabra' target='_blank'>$palabra</a>";
        }
        
$contenido .= "$listadoPalabras[$indice] ";
    }
 
        echo 
$contenido;
?>
El problema es cuando hay algún enter en la publicación, ya que me genera los links con los saltos de línea (\r\n) incluídos tanto en el href como en el texto. Y a su vez esos saltos de línea se suman a la palabra a continuación y la "pegan".

Por ejemplo si el usuario quisiera publicar:

"Hola, pruebo un link www.google.com

y otro link http://facebook.com"

Quedaría: "Hola, pruebo un link www.google.com\r\n\r\ny otro link http://facebook.com".
Y en el código:

Código HTML:
Hola, pruebo un link <a href='http://www.google.com\r\n\r\ny' target='_blank'>www.google.com\r\n\r\ny</a> otro link <a href='http://facebook.com' target='_blank'>http://facebook.com</a> 
Probé haciendo un str_replace que elimine los saltos de línea, pero el problema es justamente que perdería los saltos de línea y la publicación no respetaría los enter ingresados por el usuario. Tampoco sirve reemplazar por <br /> ni nada por el estilo.

Alguien tiene alguna sugerencia?

Muchas gracias!
  #2 (permalink)  
Antiguo 23/10/2013, 08:48
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Links automáticos

Hola, hace mucho tiempo tuve un problema similar y despues de mucho probar, me he quedado con esta funcion. Espero te sirva

Código PHP:
Ver original
  1. function makeLinks($subject) {
  2.     $pattern = "/(?i)\b(((http|https|ftp):\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/";
  3.        $text = preg_replace($pattern, "<a href=\"http://$1\" target=\"_blank\">$1</a>", $subject);
  4.        $text = str_replace("href=\"www.","href=\"http://www.",$text);
  5.     $text = str_replace("href=\"http://http://","href=\"http://",$text);
  6.     return $text;
  7. }

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #3 (permalink)  
Antiguo 23/10/2013, 09:09
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Links automáticos

Gracias por la pronta respuesta jonni09lo!

La función está muy buena, pero lamentablemente me sigue dibujando los saltos de línea :/
  #4 (permalink)  
Antiguo 23/10/2013, 09:12
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Links automáticos

Que extraño, antes de enviarte mi respuesta hice esto:

Código PHP:
Ver original
  1. echo nl2br(makeLinks("Hola, pruebo un link www.google.com
  2.  
  3. y otro link http://facebook.com"));
  4.  
  5. echo makeLinks("Hola, pruebo un link www.google.com
  6.  
  7. y otro link http://facebook.com");

Y en ambos casos el resultado fue correcto.

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #5 (permalink)  
Antiguo 23/10/2013, 09:15
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Links automáticos

Si claro, porque estás pasando el código directamente y no a través de un formulario donde se imprimen los saltos de línea :)
  #6 (permalink)  
Antiguo 23/10/2013, 09:16
Avatar de Lautaro_eb  
Fecha de Ingreso: mayo-2010
Ubicación: Bariloche, Argentina
Mensajes: 284
Antigüedad: 13 años, 10 meses
Puntos: 24
Respuesta: Links automáticos

el problema debe venir cuanto identas el texto con algún formato especifico, utilizas htmlentities en algun momento?
__________________
Mi emprendimiento: Software BRC
Youtube: Tutoriales de programación y electrónica.
  #7 (permalink)  
Antiguo 23/10/2013, 09:19
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Links automáticos

No. En este caso solamente paso la variable por un mysqli_real_escape_string y eso es todo :/
  #8 (permalink)  
Antiguo 23/10/2013, 09:19
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Links automáticos

Cita:
Iniciado por Lautaro_eb Ver Mensaje
el problema debe venir cuanto identas el texto con algún formato especifico, utilizas htmlentities en algun momento?
Estaba pensando lo mismo, pero he codificado con htmlentities y htmlspecialchars y aun funciona correctamente así que pienso que es algo mas.

@Maurich:

1. Como tratas al texto antes de pasarlo a la función?
2. Como guardas los comentarios en tu base de datos?

Sabiendo esto creo que puede ser mas sencillo reproducir el error

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #9 (permalink)  
Antiguo 23/10/2013, 09:20
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Links automáticos

Acabo de probar y es justamente el mysqli_real_escape_string lo que me trae problemas. Estaré más atenta la próxima.

Gracias a todos :)

Lo único me preocupa un poco el tema de no poder escapar el valor de ese input. Al hacerlo luego me vuelve a dibujar los saltos de línea :/
  #10 (permalink)  
Antiguo 23/10/2013, 09:23
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Links automáticos

Cita:
Iniciado por Mariuch Ver Mensaje
Acabo de probar y es justamente el mysqli_real_escape_string lo que me trae problemas. Lo puse luego de crear los links y santo remedio! Estaré más atenta la próxima.

Gracias a todos :)

Lo único me preocupa un poco el tema de no poder escapar la consulta antes de que llegue a la base de datos
Si justamente eso fue lo que acabé de ver

El manual dice:

Cita:
link
Sólo estilo por procediminetos: Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()
escapestr
La cadena a escapar.
Los caracters codifcados son NUL (ASCII 0), \n, \r, \, ', ", y Control-Z.
Y esa es la razón por la que resulta el error

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #11 (permalink)  
Antiguo 23/10/2013, 09:24
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Links automáticos

Cita:
Iniciado por Mariuch Ver Mensaje
Acabo de probar y es justamente el mysqli_real_escape_string lo que me trae problemas. Estaré más atenta la próxima.

Gracias a todos :)

Lo único me preocupa un poco el tema de no poder escapar el valor de ese input. Al hacerlo luego me vuelve a dibujar los saltos de línea :/
No dije nada. Lo escapé luego y funciona perfecto!

Saludos ^^

Última edición por Mariuch; 23/10/2013 a las 11:50
  #12 (permalink)  
Antiguo 23/10/2013, 11:50
Mariuch
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Links automáticos

Perdón por el doble post pero quedé con una intriga...

En mi foro se pueden publicar imágenes poniendo el link de las mismas dentro de una etiqueta <img> (estamos con poco espacio de almacenamiento para que se puedan subir directamente).

El problema es que con esta nueva función de links automáticos, se me destruyen las imágenes porque cada vez que encuentra un http quiere convertirlo en link.

Alguna sugerencia? :/

Gracias.

Etiquetas: links
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 07:57.