Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/02/2007, 15:31
Avatar de DeeR
DeeR
 
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Re: sacar email de un texto

Oh verdad, eso me pasa por solo leer el Titulo, ya que es correcto eso de Parsear Email.

Bueno como no me gusta, dejar a la gente a la mitad de trabajo. Me hize un mini Script que busca los Email de un Texto que esta en un String, y si encuentra un email lo envia a la funcion insertar (en el caso, guardar en una matriz global, tu ves que haces con esa funcion, meter el dato en una bd, etc ...)

Hay que tener ojo, el fin de condicion de termino de un email, a simple viste pense en el espacio, enter, ' , ", : , > , < (hay mas, tu vas completando la lista, ejemplo el signo % que creo que no se puede poner en un nombre de email).

Código PHP:
<?
// Parsear Email


function insertar($email)
{
    
// Esta es la Funcion Donde Insertamos los Email
    // En este Caso la vamos a guardar en un Matriz e Imprimir los Email
    
global $list_de_mail;    
    
$list_de_mail[count($list_de_mail)]=$email;
    
// En tu Caso puedes aqui insertar el email en una bd
}


function 
condicion_de_termino($dato)
{    
     
// Lista de Condiciones de Termino
    
$reg[0]=" ";
    
$reg[1]=":";
    
$reg[2]='"';
    
$reg[3]="'";
    
$reg[4]="<";
    
$reg[5]=">";
    
$reg[6]="\n";
    
$reg[7]="\r";
    
$reg[8]="\t";
    
    for (
$i=0$i count ($reg) ; $i++)
    {
        if ( 
$dato == $reg[$i])
        {
            return (
1);
        }
    }
    return (
0);
}


// El Archivo de Texto lo Cargamos en un String
$texto='Hola juan perez como estan [email protected] pepe [email protected] hola [email protected] [email protected] [email protected] gato [email protected] [email protected] [email protected] [email protected] [email protected] <p><a href="mailto:[email protected]">[email protected]</a></p>
y
<p>[email protected]</p>Aqui va un texto y otras cosas'
;
// El Texto debe tener a lo menos un espacio al comienzo y al final
$texto=" ".$texto." ";




for (
$i=0$i<strlen($texto);$i++)
{
    
    
// Si encontramos el Caracter Arroba
    
if ( $texto[$i] == "@")
    {
        
// Buscamos el Espacio para Atras
        
$t=$i;
        while ( !
condicion_de_termino($texto[$t]) )
        {
            
$t--;    
        }
        
$inicio=$t;
        
$t=$i;
        while ( !
condicion_de_termino($texto[$t]) )
        {
            
$t++;    
        }
        
$fin=$t;
        
$email=substr($texto,($inicio+1),($fin-$inicio-1));
        
insertar($email);
        
        
        
        
    }
    
    
    
}


// Mostramos la Matriz Global $list_de_mail
print_r($list_de_mail);



?>
Me ubiera gustado hacerla con Expresiones Regulares, pero todavia no cach muxo sobre ella, simplemente la hize a la vieja escuela, recorriendo el string caracter por caracter xD xD xD Ojala te sirva Saludos :P