Foros del Web » Programando para Internet » PHP »

Capar cadenas con enlaces. ¿Easy no?

Estas en el tema de Capar cadenas con enlaces. ¿Easy no? en el foro de PHP en Foros del Web. Código PHP: <?php    /*Bueno, lo explicare desde aqui. Resulta que tengo aqui un capador de frases.    Si escribo una direccion que contiene [url]http://...[/url] todo va bien. Sin embargo, si escribo una direccion que empiece por [url]www...[/url] la direccion no se capa.   He comprobado el eregi_replace de www, y está bien, pero nada de nada.   A ver si me ayudais a encontrar la solucion que llevo mas de una semana con este script.   Muchas gracias.   El script lo copiais y lo pegais tal y como esta y os funcionara perfectamente.   */   //¡Este es el mensaje base!    $mensaje  =  "\nDirección http: [url]http://www.ladireccionlarga.com/blablabla/index.php\nDirección[/url] www: [url]www.ladireccionlarga.com/blablabla/index.php[/url]" ; #Variables retocadas    $mensaje  =  eregi_replace ( "\n" , ...
  #1 (permalink)  
Antiguo 12/02/2003, 08:45
Avatar de El Menda  
Fecha de Ingreso: junio-2001
Ubicación: Jaén
Mensajes: 516
Antigüedad: 23 años, 5 meses
Puntos: 0
Pregunta Capar cadenas con enlaces. ¿Easy no?

Código PHP:
<?php
  
/*Bueno, lo explicare desde aqui. Resulta que tengo aqui un capador de frases. 
  Si escribo una direccion que contiene [url]http://...[/url] todo va bien. Sin embargo, si escribo una direccion que empiece por [url]www...[/url] la direccion no se capa.
  He comprobado el eregi_replace de www, y está bien, pero nada de nada.
  A ver si me ayudais a encontrar la solucion que llevo mas de una semana con este script.
  Muchas gracias.
  El script lo copiais y lo pegais tal y como esta y os funcionara perfectamente.
  */
  //¡Este es el mensaje base!
  
$mensaje "\nDirección http: [url]http://www.ladireccionlarga.com/blablabla/index.php\nDirección[/url] www: [url]www.ladireccionlarga.com/blablabla/index.php[/url]";

#Variables retocadas
  
$mensaje eregi_replace("\n"," <br /> ",$mensaje);

  echo 
"<font color=\"red\">Frase sin capar: ".$mensaje."</font><br><br>"//Mensaje sin capar
#Capar_frase
#Capa todo lo que pilla
    
function capar_frase($frase_entrada) {
    function 
capar_palabra($palabra) {
  
$cortar=20// cortar palabra de mas de .. caracteres
  
if (strlen($palabra)>$cortar) {
    
//Ahora capamos enlaces
    
if (strstr($palabra"http:") OR strstr($palabra"www")) {
  
//Cortamos el enlace cuidadosamente para no estropearlo
  
$palabro substr($palabra0$cortar);
  
$palabro .= "..";
  
$palabra eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)''<a href="\\1"  target="_blank">'.$palabro.'</a>'$palabra);
  
$palabra eregi_replace('([[:space:]()[{}])([url]www.[/url][-a-zA-Z0-9@:%_\+.~#?&//=]+)''\\1<a href="http://\\2" target="_blank">'.$palabro.'</a>'$palabra);
    
//Esto no son enlaces
    
} else {
  
$palabra substr($palabra0$cortar);
  
$palabra .= "..";
    }
  }
  return 
$palabra;  //Devuelve la palabra
    
}

  
$palabras =split(" ",$frase_entrada);            //Definimos las palabras
  
foreach ($palabras as $palabra) {                //Ahora lo llamamos palabra
  
$frase_salida .=capar_palabra($palabra)." "//Añadimos los espacios para separar
  
}
  return 
$frase_salida;  //Devuelve la frase de salida
    
}

  
$mensaje capar_frase($mensaje); //Capamos con la funcion

  
echo "<font color=\"green\">Frase capada: ".$mensaje."</font>"//Escribimos mensaje
?>
__________________
"No hay mujer fea sino copa de menos"
  #2 (permalink)  
Antiguo 12/02/2003, 09:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Podrias haber explicado tu problema FUERA del código .. Los comentarios si usas el boton "PHP" como veras salen en amarillo y no formatea el texto .. así q es como complicado leerlo

Bueno .. tu problema lo tienes en la expresion regular:

Código PHP:
$palabra eregi_replace('([[:space:]()[{}])(<a href="/out.php?http%3A%2F%2Fwww." target="_blank">www.</a>[-a-zA-Z0-9@:%_+.~#?&//=]+)''\1<a href="http://\2" target="_blank">'.$palabro.'</a>'$palabra); 
Prueba a usar solo:
Código PHP:
$palabra eregi_replace('([[:space:]()[{}])(<a href="/out.php?http://www." target="_blank">www.</a>[-a-zA-Z0-9@:%_+.~#?&//=]+)''\1<a href="http://\2" target="_blank">'.$palabro.'</a>'$palabra); 
O .. intenta esto: (digo intenta pues igual no funciona .. si mal no recuerdo en expresiones regulares .. usar [algo|otracosa] es: "o algo .. o otracosa" ...

Código PHP:
$palabra eregi_replace('([[:space:]()[{}])(<a href="/out.php?[http://www|http%3A%2F%2Fwww]." target="_blank">www.</a>[-a-zA-Z0-9@:%_+.~#?&//=]+)''\1<a href="http://\2" target="_blank">'.$palabro.'</a>'$palabra); 
Un saludo,

Última edición por Cluster; 12/02/2003 a las 09:32
  #3 (permalink)  
Antiguo 12/02/2003, 12:02
Avatar de El Menda  
Fecha de Ingreso: junio-2001
Ubicación: Jaén
Mensajes: 516
Antigüedad: 23 años, 5 meses
Puntos: 0
Perdona, pero al poner el codigo en la pagina me ha cambiado lo que tenia puesto, y era esto:
$palabra = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '\\1<a href="http://\\2" target="_blank">'.$palabro.'</a>', $palabra);
Me sigue sin funcionar
__________________
"No hay mujer fea sino copa de menos"
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 21:44.