PHP电子邮件清理过滤器

时间:2018-06-30 13:42:11

标签: php

我试图弄清楚为什么我的消毒过滤器不起作用。输入不正确字符的电子邮件时,它将显示不正确字符的电子邮件。我以为它会去除不正确的字符,只显示正确的电子邮件地址。下面是我的代码。我在做什么错了?

<?php       

if(filter_has_var(INPUT_POST, 'data')){

$email = $_POST['data'];

//Now remove illegal characters
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
echo $email;

}
?>  

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="data">
<button type="submit">Submit</button>
</form>

4 个答案:

答案 0 :(得分:2)

在我看来,这似乎行得通。但是,我不希望存储与实际输入不同的电子邮件。如果传入的电子邮件地址不正确,我将返回一条错误消息,要求用户提供真实的电子邮件地址:

#u

答案 1 :(得分:0)

我不知道这是否正是您要寻找的东西,只是尝试一下。

<?php
function filter_mail($string) {
   return preg_replace('/[^A-Za-z0-9.@\-]/', '', $string); // We remove special chars and accept only Alphs&Nums&.&@
}
$mail="jp)(*&@gmail)**&.com";
echo filter_mail($mail); //This will output the desired email
echo "<br>";
echo $mail; //This is how it was !
?>

答案 2 :(得分:0)

这可能会有所帮助,消毒后我们需要检查它是否为有效邮件

<?php       
  if(filter_has_var(INPUT_POST, 'data')){
    $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 

    $email = $_POST['data'];
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);

    if (preg_match($regex, $email)) {
      echo $email;
    } else {
      echo "invalid email";
    }
  }
?>  

答案 3 :(得分:0)

似乎只能清理某些类型的字符。例如,以下是将被清除的错误电子邮件示例:

(comment)localpart@example.com-清理后:commentlocalpart@example.com “ much.more不寻常” @ example.com-消毒后:much.moreunusual@example.com

但是这些例如不会被消毒:

sarah {[@ gmail} {[。com-消毒后:sarah {[@ gmail}} {[。com jp*&@gmail**&.com-清理后:jp *&@ gmail **&。com