2012-09-03 12 views
5

Trudno opisać mój problem słowami, postaram dając przykład:Jak usunąć tagi wyjątkiem Format poczty znaczników kontenerowych

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

trzeba usunąć wszystkie znaczniki z wyjątkiem <[email protected]>

Jak możemy zrobić w javascript, a także PHP?

Moje rozwiązanie 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

To jest nieprawidłowy znacznik. '<>' Wokół adresu e-mail powinno być '>' i '<' lub, jeśli jest to XHTML, tekst P powinien być sekcją CDATA. Tak jak teraz, e-mail tworzy nieprawidłowy element. – Gordon

+0

@Gordon Całkowicie się z tobą zgadzam, muszę przekonwertować < and > na > i < tylko jeśli jest to adres e-mail, inne tagi powinny być w paski. – WebolizeR

+0

@WebolizeR Nie, powinieneś wstawić kątowniki jako elementy już ... – feeela

Odpowiedz

1

ok moje rozwiązanie jest trochę dziwne, ale rade: 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

użycie poniżej w sekcji nagłówków

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

i umieść w ten sposób

str = '<p>lorem ipsum "<[email protected]>" donor sit <br></p>'; 
Powiązane problemy