2012-09-03 18 views
5

Bu sözlerden benim sorunu tarif etmek zordur posta biçimi konteyner etiketleri haricinde etiketlerini kaldırmak için Javascript ve PHP'de nasıl yapabiliriz? nasıl bir örnek vererek çalışacağız,

My PHP çözüm:

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

Bu geçersiz işaretleme. E-posta adresinin etrafındaki <0} > 've' < 'olmalıdır, ya da XHTML ise, P metni bir CDATA bölümü olmalıdır. Artık e-posta, geçersiz bir öğe oluşturuyor. – Gordon

+0

@Gordon Sizinle tamamen aynı fikirdeyim, < and >'u > ve < numaralı telefonlara dönüştürmeniz gerekiyorsa, sadece bir e-posta adresi varsa, diğer etiketlerin çizgili olması gerekir. – WebolizeR

+0

@WebolizeR Hayır, köşeli parantezleri zaten varlıklar olarak eklemiş olmalısınız… – feeela

cevap

1

Tamam benim çözüm biraz garip, ama hile olacaktır: başlıklar bölümünde Ge aşağıda

$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

kullanım

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

ve bu gibi koymak

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