2012-09-03 13 views
5

Es difícil describir mi problema por medio de palabras, voy a tratar de dar un ejemplo:Cómo quitar las etiquetas, excepto las etiquetas de contenedores formato electrónico

str = '<p>lorem ipsum <[email protected]> donor sit <br></p>'; 

I necesidad de eliminar todas las etiquetas excepto <[email protected]>

¿Cómo podemos hacer en javascript y también en PHP?

Mi solución PHP:

class test { 
    public function keepMailAddresses($text){ 
     $callBack = array($this,'_keepMailAddresses'); 
     return preg_replace_callback('/(<)([^0-9][a-zA-Z0-9_]*([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4})(>)/i', $callBack, $text);   
    } 

    private function _keepMailAddresses($matches){ 
     return '&lt;'.$matches[2].'&gt;'; 
    } 

} 

$obj = new test(); 
echo $obj->keepMailAddresses('<p>lorem ipsum <[email protected]> donor sit <br></p>'); 
+1

Esto es un marcado no válido. El '<>' alrededor de la dirección de correo electrónico debe ser '>' y '<' o, si esto es XHTML, el texto P debe ser una sección CDATA. Como está ahora, el correo electrónico está creando un elemento no válido. – Gordon

+0

@Gordon Estoy completamente de acuerdo con usted, necesito convertir < and > en > y < solo si se trata de una dirección de correo electrónico, otras etiquetas deben ser de rayas. – WebolizeR

+0

@WebolizeR No, deberías haber insertado los corchetes angulares como entidades ya ... – feeela

Respuesta

1

bien mi solución es poco raro, pero lo hará el truco: D

$pagecode = '<p>lorem ipsum <[email protected]> donor <[email protected]> sit <[email protected]><br></p>'; 

// this will check if it's a real email but you don't need it 
/*$allowed = preg_match_all("/\<+([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})+\>/i", $pagecode, $matches);*/ 

$allowed = preg_match_all("/\<([_a-z0-9-\.]+)@([_a-z0-9-\.]+)\>/i", $pagecode, $matches); 

$allowed = implode(" ", $matches[0]); 
$output = strip_tags($pagecode, $allowed); 
echo htmlentities($output); 
1

uso continuación en la sección encabezados

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 

y poner así

str = '<p>lorem ipsum "<[email protected]>" donor sit <br></p>'; 
Cuestiones relacionadas