Foros del Web » Programando para Internet » PHP »

Mostrar enlaces al igual que en los mensajes de este foro?

Estas en el tema de Mostrar enlaces al igual que en los mensajes de este foro? en el foro de PHP en Foros del Web. Hola queridos amigos :P jeje haber tengo un problemilla, tengo una consulta a la base de datos que me muestra unos datos en pantalla, pero ...
  #1 (permalink)  
Antiguo 28/05/2009, 09:07
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Mostrar enlaces al igual que en los mensajes de este foro?

Hola queridos amigos :P jeje haber tengo un problemilla, tengo una consulta a la base de datos que me muestra unos datos en pantalla, pero mi pregunta viene cuando entre el texto mostrado es una direccion web lo que aparece, ¿Como hago que la direccion web salga como un enlace hacia esa web y no se quede solo como texto?

Última edición por rompeguesos; 29/05/2009 a las 08:53 Razón: Encontre el modo de poneros un ejemplo en este post :P
  #2 (permalink)  
Antiguo 28/05/2009, 09:12
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Mostrar enlaces en consulta de base de datos?

puedes usar eregi_replace() para identificar los links y posteriormente convertirlos en enlaces.

para más información http://www.php.net/eregi_replace
  #3 (permalink)  
Antiguo 28/05/2009, 09:15
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Mostrar enlaces en consulta de base de datos?

Si te soy sincero no se como se usa ya que la verdad tampoco viene mucha información, ¿podrias explicarme como e de usarla?
  #4 (permalink)  
Antiguo 28/05/2009, 09:49
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Mostrar enlaces en consulta de base de datos?

espera un poco intento crearte el código, el problema es que no estoy muy familiarizado con los patrones pero si que tengo la documentación necesaria, tonces la voy a revisar, haré lo posible pero no te aseguro nada, cuando lo tenga te lo mandaré en un PM.
  #5 (permalink)  
Antiguo 29/05/2009, 12:36
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

esto es con respecto al privado: es que hace un rato intente responder pero había un error en el foro...

bueno la cosa es que conseguí hacer esto pero al parecer no me trabaja bien, si alguien puede corregirlo por favor.

El código esta para que lo pruebes, pero en realidad lo único importante es desde la linea 3 hasta la 6

Código PHP:
  1 <?php
  2 
if($_POST['texto'] != ''){
  
3         $pattern '((?:http\:\/\/|)(\w+)\.\w{2,4}(?:\/\S*|))';
  
4         $replacement '<a href="$1" title="entra en $2">$1</a>';
  
5         $string $_POST['texto'];
  
6         $cadena eregi_replace($pattern$replacement$string);
  

  8         
echo $cadena;
  
}else{
 
10         echo "
 11         <form action=\"\" method=\"post\">
 12         <textarea name=\"texto\" cols=\"50\" rows=\"20\">
 13         </textarea>
 14         <input type=\"submit\" />
 15         </form>
 16         "
;
 
17 }
 
18 ?>
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #6 (permalink)  
Antiguo 29/05/2009, 12:39
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

Me lanza este error:

Warning: eregi_replace() [function.eregi-replace]: REG_BADRPT in /home/blackfox/public_html/www/eregiprueba.php on line 6

por cierto, la documentación sobre patrones es esta:

http://cl.php.net/manual/es/referenc...ern.syntax.php
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #7 (permalink)  
Antiguo 29/05/2009, 12:51
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

estoy buscando sobre el tema y me sigue dando el error.. si consigo algo te aviso :D
  #8 (permalink)  
Antiguo 29/05/2009, 12:56
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

encontré algo interesante:

$text = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $text);

si haces esto funciona:
Código PHP:
 2 if($_POST['texto'] != ''){
  
3         $pattern "[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]";
  
4         $replacement "<a href=\"\\0\">\\0</a>";
  
5         $string $_POST['texto'];
  
6         $cadena eregi_replace($pattern$replacement$string);
  
7         
  8         
echo $cadena;
  
}else{
 
10         echo "
 11         <form action=\"\" method=\"post\">
 12         <textarea name=\"texto\" cols=\"50\" rows=\"20\">
 13         </textarea>
 14         <input type=\"submit\" />
 15         </form>
 16         "
;
 
17 }
 
18 ?> 
pero la regla es que la url sea completa, es decir, de la forma proto://subdom.domain.tld
intentaré hacerlo más flexible
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #9 (permalink)  
Antiguo 29/05/2009, 13:01
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

ejejje es verdad eso funciona bien pero solo si indicas http://..... si pones las www...... sale como texto normal sigo buscando haber si consigo algo jeje muchas gracias por lo que tas haciendo. :D
  #10 (permalink)  
Antiguo 29/05/2009, 13:29
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

he encontrao esto tambien que es valido si escribes http:// :

Código PHP:
<?php
$txt 
'<p>Este seria el texto con url http://www.tutores.org el cual se autoconvertira en enlace.'
$txt preg_replace'/(http|ftp)+(s)?:(\/\/)((\w|\.)+)(\/)?(\S+)?/i''<a href="\0">\4</a>'$txt ); 
echo 
$txt
?>
Se puede hacer algo con lo que pretendemos nosotros hacer? :D
  #11 (permalink)  
Antiguo 29/05/2009, 13:42
 
Fecha de Ingreso: mayo-2006
Mensajes: 58
Antigüedad: 18 años
Puntos: 0
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

Ok yo creo que se puede hacer de la siguiente forma por que lo probé:

Código PHP:
$select mysql_query("SELECT url FROM miTabla") or die (mysql_error());

while(
$fila mysql_fetch_array($query)){
         
         echo 
"<a href=\"".$fila['url']."\">".$fila['url']."</a>";


El resultado sería las direcciones que tienes en la base de datos, listas para hacer click en ellas y que te lleven al sitio.

Espero que te sirva
  #12 (permalink)  
Antiguo 29/05/2009, 13:46
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

El caso es que las direcciones se sacarian de texto escrito por usuarios por ejemplo: Ahora mismo estoy escribiendo un texto y se me a antojado poner www.goolge.com este enlace. :P
  #13 (permalink)  
Antiguo 29/05/2009, 13:49
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

jeje, no me rendiré, rompeguesos, creo que la única forma es que aprendamos a dominar las expresiones regulares, por cierto, hay que cambiar el ereg por preg, puesto que los pattern de posix que usa ereg serán eliminados para la versión 6 de php, aunque no estoy muy seguro de si esto en realidad afecte.

mira lo que encontré:
http://www.php-hispano.net/archivos/...egulares1.html
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #14 (permalink)  
Antiguo 29/05/2009, 13:55
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

mira la funcion que he encontrado y que funciona perfectamente ademas no solo para http:// o www. sino que tambien vale para mas tipos de enlaces como ftp://, emails etc.... jejej cuando la pruebe ya funcionando te comento lo que sea.
Ya volvere a porbar mañana ya que ahora mismo me vuelvo a marchar :D, un saludo y mañana seguimos jejej

Código PHP:
function enlaces($noticia)
{
return 
preg_replace(
array(
'/(?(?=<a[^>]*>.+<\/a>)
(?:<a[^>]*>.+<\/a>)
|
([^="\']?)((?:https?|ftp|bf2|):\/\/[^<> \n\r]+)
)/iex'
,
'/<a([^>]*)target="?[^"\']+"?/i',
'/<a([^>]+)>/i',
'/(^|\s)(www.[^<> \n\r]+)/iex',
'/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)
(\\.[A-Za-z0-9-]+)*)/iex'
),
array(
"stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\">\\2</a>\\3':'\\0'))",
'<a\\1',
'<a\\1 target="_blank">',
"stripslashes((strlen('\\2')>0?'\\1<a href=\"http://\\2\">\\2</a>\\3':'\\0'))",
"stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
),
$noticia
);


Última edición por rompeguesos; 29/05/2009 a las 13:55 Razón: jejej se me olvido poner el codigo
  #15 (permalink)  
Antiguo 29/05/2009, 16:56
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

Lo he conseguido!!!! me cansé de ver ejemplos entonces cogí el lápiz y el papel, empecé a escribir todo tipo de urls válidas y conseguí el pattern perfecto:
Código PHP:
  1 <?php
  2 
if($_POST['texto'] != ''){
  
3         $pattern "/(?:http\:\/\/)?([[:alnum:]]+\.[\/[:alnum:]\.]*)/";
  
4         $replacement "<a href=\"http://\\1\">\\1</a>";
  
5         $string $_POST['texto'];
  
6         $cadena preg_replace($pattern$replacement$string);
  
7         
  8         
echo $cadena;
  
}else{
 
10         echo "
 11         <form action=\"\" method=\"post\">
 12         <textarea name=\"texto\" cols=\"50\" rows=\"20\">
 13         </textarea>
 14         <input type=\"submit\" />
 15         </form>
 16         "
;
 
17 }
 
18 ?>
aunque creo que esto también convertiría las frases del tipo frase.frase, o sea, separadas por un punto. pero intentaré corregirlo...
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #16 (permalink)  
Antiguo 29/05/2009, 17:05
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
De acuerdo Código completo!!!

Código PHP:
  1 <?php
  2 
if($_POST['texto'] != ''){
  
3         $pattern "/(?:http\:\/\/)?([[:alnum:]]+\.[[:alnum:]]{2,4}[\/[:alnum:]\.\?\=\&\;]*)/";
  
4         $replacement "<a href=\"http://\\1\">\\1</a>";
  
5         $string $_POST['texto'];
  
6         $cadena preg_replace($pattern$replacement$string);
  
7         
  8         
echo $cadena;
  
}else{
 
10         echo "
 11         <form action=\"\" method=\"post\">
 12         <textarea name=\"texto\" cols=\"50\" rows=\"20\">
 13         </textarea>
 14         <input type=\"submit\" />
 15         </form>
 16         "
;
 
17 }
 
18 ?>
lo he probado con esta cadena: (Espero que no sea reconocida como spam, solo es una web que me pertenece y está en reparación, en caso de ser reconocida como spam pido a cualquier admin o mod que por favor la borre)

prueba 1: http://www.blackotakuzone.es/
prueba 2: http://www.blackotakuzone.es
prueba 3: http://blackotakuzone.es/
prueba 4: http://blackotakuzone.es
prueba 6: www.blackotakuzone.es/
prueba 7: www.blackotakuzone.es
prueba 8: blackotakuzone.es/
prueba 9: blackotakuzone.es
prueba 10: http://www.blackotakuzone.es/index.php?algo=algo

Funciona perfectamente, espero que esto le sirva a muchos....
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter

Última edición por jaao_death; 30/05/2009 a las 07:31 Razón: gracias a jam1138 e modificado el pattern para que identifique las url de TLDs de 4 caracteres de longitud
  #17 (permalink)  
Antiguo 29/05/2009, 17:29
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

... quizá no sea buena idea considerar una cadena como "algo.com" una URL, sobre todo si el ingreso de texto es para todo público.La gente suele equivocarse mucho .

En todo caso, sería limitarla a valores válidos

Por cierto, ¿y qué es de las URL como algo.name (que se han vuelto populares)?, no las consideras ni con la www ni ná.

Hay un par de FAQs que contemplan este tema, igual puedes editarlas para mejorarlas/unirlas/ampliarlas.

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #18 (permalink)  
Antiguo 30/05/2009, 07:47
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Información Respuesta: Mostrar enlaces al igual que en los mensajes de este foro?

Cita:
Iniciado por jam1138 Ver Mensaje
... quizá no sea buena idea considerar una cadena como "algo.com" una URL, sobre todo si el ingreso de texto es para todo público.La gente suele equivocarse mucho .
Comparto tu opinión pero y si la gente añade una url del tipo dominio.TLD? acaso no sería bueno también reconocerlas? si limitamos a que el usuario haga urls anteponiendo proto:// no sería muy bueno, puesto que todos sabemos que es muy común omitir esto, ahora, si dejamos pasar el protocolo y añadimos la regla de que la URL anteponga el www, qué pasa con las URLs del tipo subdomain.domain.TLD? se podría añadir la regla de que tenga como mínimo dos puntos para este tipo pero es muy complicado puesto que ya no funcionarían las URLs PROTO://domain.TLD, la verdad es que este tema es muy complicado, pero creo que el pattern que he puesto anteriormente es uno de los más flexibles.... pero el tema sigue habierto....
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
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:21.