PHP电子邮件净化过滤器

PHP电子邮件净化过滤器,php,Php,我想知道为什么我的消毒过滤器不工作。输入字符不正确的电子邮件时,将显示字符不正确的电子邮件。我原以为它会去掉不正确的字符,只显示正确的电子邮件地址。下面是我的代码。我做错了什么 <?php if(filter_has_var(INPUT_POST, 'data')){ $email = $_POST['data']; //Now remove illegal characters $email = filter_var($email, FILTER_SANITIZE_E

我想知道为什么我的消毒过滤器不工作。输入字符不正确的电子邮件时,将显示字符不正确的电子邮件。我原以为它会去掉不正确的字符,只显示正确的电子邮件地址。下面是我的代码。我做错了什么

<?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>

我不知道这是否正是你想要的,但试一下吧

<?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 !
?>

我不知道这是否正是你想要的,但试一下吧

<?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 !
?>

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


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


在我看来,它似乎在起作用。但是,我不想存储与确切输入不同的电子邮件。如果收到的电子邮件地址不正确,我会返回一条错误消息,要求用户提供真实的电子邮件地址:

if(filter_has_var(INPUT_POST, 'data')){
  $email = trim($_POST['data']);
  $sanitized = filter_var($email, FILTER_SANITIZE_EMAIL);
  if($email === $sanitized && filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "This is a valid email: " . $email;
  } else {
    echo "This is an invalid email: " . $email;
  }
}

在我看来,它似乎在起作用。但是,我不想存储与确切输入不同的电子邮件。如果收到的电子邮件地址不正确,我会返回一条错误消息,要求用户提供真实的电子邮件地址:

if(filter_has_var(INPUT_POST, 'data')){
  $email = trim($_POST['data']);
  $sanitized = filter_var($email, FILTER_SANITIZE_EMAIL);
  if($email === $sanitized && filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "This is a valid email: " . $email;
  } else {
    echo "This is an invalid email: " . $email;
  }
}

似乎只有某些类型的角色才能被净化。例如,这里有一些将被清除的错误电子邮件示例:

commentlocalpart@example.com-消毒后:commentlocalpart@example.com 更多unusual@example.com-消毒后:很多。moreunusual@example.com

但例如,这些将不会得到消毒:

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

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

commentlocalpart@example.com-消毒后:commentlocalpart@example.com 更多unusual@example.com-消毒后:很多。moreunusual@example.com

但例如,这些将不会得到消毒:

sarah{[@gmail}{[.com-经过消毒后:sarah{[@gmail}{[.com
jp*&@gmail**&.com-净化后:jp*&@gmail**&.com

示例输入和输出是什么?假设我输入jp*&@gmail**&.com,我希望净化过滤器去掉不正确的字符并给我jp@gmail.comParentheses不允许作为主机或用户名的一部分,但根据相关标准,*完全可以RFC.什么是示例输入,你得到什么输出?假设我输入jp*&@gmail**&.com,我希望sanitize过滤器能去掉不正确的字符并给我jp@gmail.comParentheses不允许作为主机或用户名的一部分,但根据相关RFC,*完全可以。我正在做一个测试。我想测试一下sanitiza过滤功能正常。目前它没有做它应该做的事情-清理电子邮件。有趣的是,当我在php.net上搜索filter_sanitize_电子邮件时,我收到一条消息,说filter_sanitize_电子邮件不存在。这个过滤器可能不推荐吗?在我看来,filter_sanitize_电子邮件并不像人们直觉上希望的那么严格。它是例如,是否删除和/或不删除。但是,我不认为这是为了生成一个好的电子邮件地址。之后需要使用FILTER\u VALIDATE\u email来检查该地址是否确实可以接受。注意:我不认为它已被弃用。查看此页。我正在进行测试。我想测试一下消毒过滤器的工作原理。Curren有意思的是,当我在php.net上搜索filter\u sanitize\u email时,我收到一条消息,说filter\u sanitize\u email不存在。这个过滤器可能被弃用了吗?在我看来,filter\u sanitize\u email并不像人们直观上所希望的那样严格。例如,它会删除和/但不是。但是,我不认为这是为了生成一个好的电子邮件地址。之后需要使用FILTER\u VALIDATE\u电子邮件来检查该地址是否真的可以接受。注意:我不认为它已被弃用。请查看此页面。但这是重点-FILTER\u sanitize\u电子邮件没有进行消毒。我正在尝试测试。但这是正确的关键是,过滤邮件没有净化。我正在测试。