Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/02/2003, 08:45
Avatar de El Menda
El Menda
 
Fecha de Ingreso: junio-2001
Ubicación: Jaén
Mensajes: 516
Antigüedad: 22 años, 10 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"